├── .circleci ├── config.yml ├── env-helpers.inc.sh └── env.sh ├── .editorconfig ├── .eslintignore ├── .eslintrc-base.json ├── .eslintrc-browser.json ├── .eslintrc-node.json ├── .eslintrc-todo.json ├── .eslintrc.json ├── .gitattributes ├── .github ├── ISSUE_TEMPLATE.md └── PULL_REQUEST_TEMPLATE.md ├── .gitignore ├── .mailmap ├── .nvmrc ├── CHANGELOG.md ├── CODE_OF_CONDUCT.md ├── CONTRIBUTING.md ├── DEVELOPERS.md ├── Gruntfile.js ├── LICENSE ├── README.closure.md ├── README.md ├── RELEASE.md ├── SECURITY.md ├── TRIAGING.md ├── angularFiles.js ├── benchmarks ├── .eslintrc.json ├── README.md ├── animation-bp │ ├── app.js │ ├── bp.conf.js │ ├── jquery-noop.js │ └── main.html ├── bootstrap-compile-bp │ ├── app.js │ ├── bootstrap-carousel.tpl.html │ ├── bootstrap-theme.tpl.html │ ├── bp.conf.js │ └── main.html ├── event-delegation-bp │ ├── app.js │ ├── bp.conf.js │ └── main.html ├── largetable-bp │ ├── app.js │ ├── bp.conf.js │ ├── jquery-noop.js │ └── main.html ├── ng-class-bp │ ├── app.js │ ├── bp.conf.js │ └── main.html ├── ng-options-bp │ ├── app.js │ ├── bp.conf.js │ └── main.html ├── orderby-bp │ ├── app.js │ ├── bp.conf.js │ ├── jquery-noop.js │ └── main.html ├── parsed-expressions-bp │ ├── app.js │ ├── bp.conf.js │ └── main.html ├── repeat-animate-bp │ ├── app-classfilter.js │ ├── app-noanimate.js │ ├── app.js │ ├── bp.conf.js │ ├── common.js │ └── main.html └── select-ng-value-bp │ ├── app.js │ ├── bp.conf.js │ └── main.html ├── css ├── angular-scenario.css └── angular.css ├── docs ├── app │ ├── assets │ │ ├── Error404.html │ │ ├── css │ │ │ ├── angular-topnav.css │ │ │ ├── animations.css │ │ │ ├── doc_widgets.css │ │ │ ├── docs.css │ │ │ ├── prettify-theme.css │ │ │ └── prettify.css │ │ ├── favicon.ico │ │ ├── img │ │ │ ├── AngularJS-small.png │ │ │ ├── angularjs-for-header-only.svg │ │ │ ├── bullet.png │ │ │ ├── glyphicons-halflings-white.png │ │ │ └── glyphicons-halflings.png │ │ ├── js │ │ │ ├── angular-bootstrap │ │ │ │ └── dropdown-toggle.js │ │ │ └── search-worker.js │ │ └── robots.txt │ ├── e2e │ │ ├── .eslintrc.json │ │ ├── api-docs │ │ │ ├── api-pages.scenario.js │ │ │ ├── directive-pages.scenario.js │ │ │ ├── provider-pages.scenario.js │ │ │ └── service-pages.scenario.js │ │ ├── app.scenario.js │ │ └── table-of-contents.scenario.js │ ├── src │ │ ├── .eslintrc.json │ │ ├── app.js │ │ ├── directives.js │ │ ├── docs.js │ │ ├── errors.js │ │ ├── examples.js │ │ ├── search.js │ │ ├── tutorials.js │ │ └── versions.js │ └── test │ │ ├── .eslintrc.json │ │ ├── directivesSpec.js │ │ ├── docsSpec.js │ │ └── errorsSpec.js ├── config │ ├── ignore.words │ ├── index.js │ ├── inline-tag-defs │ │ └── type.js │ ├── processors │ │ ├── error-docs.js │ │ ├── index-page.js │ │ ├── keywords.js │ │ ├── pages-data.js │ │ ├── sitemap.js │ │ └── versions-data.js │ ├── services │ │ ├── deployments │ │ │ ├── debug.js │ │ │ ├── default.js │ │ │ ├── jquery.js │ │ │ ├── production.js │ │ │ └── test.js │ │ ├── errorNamespaceMap.js │ │ ├── getMinerrInfo.js │ │ └── getVersion.js │ ├── tag-defs │ │ ├── deprecated.js │ │ ├── deprecated.spec.js │ │ ├── installation.js │ │ ├── sortOrder.js │ │ ├── this.js │ │ └── tutorial-step.js │ └── templates │ │ ├── app │ │ ├── angular-service.template.js │ │ ├── error.template.html │ │ ├── errorNamespace.template.html │ │ ├── indexPage.template.html │ │ ├── json-doc.template.json │ │ ├── nav-data.template.js │ │ ├── pages-data.template.js │ │ ├── sitemap.template.xml │ │ └── tutorial.template.html │ │ ├── examples │ │ ├── index.template.html │ │ ├── manifest.template.json │ │ ├── protractorTests.template.js │ │ ├── runnableExample.template.html │ │ ├── template.css │ │ ├── template.html │ │ ├── template.js │ │ ├── template.json │ │ ├── template.protractor │ │ ├── template.scenario │ │ └── template.spec │ │ └── ngdoc │ │ ├── api │ │ ├── api.template.html │ │ ├── componentGroup.template.html │ │ ├── directive.template.html │ │ ├── filter.template.html │ │ ├── function.template.html │ │ ├── input.template.html │ │ ├── module.template.html │ │ ├── object.template.html │ │ ├── provider.template.html │ │ ├── service.template.html │ │ └── type.template.html │ │ ├── base.template.html │ │ ├── lib │ │ ├── deprecated.html │ │ ├── events.template.html │ │ ├── macros.html │ │ ├── methods.template.html │ │ ├── params.template.html │ │ ├── properties.template.html │ │ ├── returns.template.html │ │ └── this.template.html │ │ └── overview.template.html ├── content │ ├── api │ │ └── index.ngdoc │ ├── error │ │ ├── $animate │ │ │ ├── nongcls.ngdoc │ │ │ └── notcsel.ngdoc │ │ ├── $cacheFactory │ │ │ └── iid.ngdoc │ │ ├── $compile │ │ │ ├── baddir.ngdoc │ │ │ ├── badrestrict.ngdoc │ │ │ ├── ctreq.ngdoc │ │ │ ├── ctxoverride.ngdoc │ │ │ ├── infchng.ngdoc │ │ │ ├── iscp.ngdoc │ │ │ ├── missingattr.ngdoc │ │ │ ├── multidir.ngdoc │ │ │ ├── multilink.ngdoc │ │ │ ├── noctrl.ngdoc │ │ │ ├── nodomevents.ngdoc │ │ │ ├── nonassign.ngdoc │ │ │ ├── noslot.ngdoc │ │ │ ├── reqslot.ngdoc │ │ │ ├── selmulti.ngdoc │ │ │ ├── srcset.ngdoc │ │ │ ├── tplrt.ngdoc │ │ │ └── uterdir.ngdoc │ │ ├── $controller │ │ │ ├── ctrlfmt.ngdoc │ │ │ ├── ctrlreg.ngdoc │ │ │ └── noscp.ngdoc │ │ ├── $http │ │ │ ├── baddata.ngdoc │ │ │ ├── badjsonp.ngdoc │ │ │ └── badreq.ngdoc │ │ ├── $injector │ │ │ ├── cdep.ngdoc │ │ │ ├── itkn.ngdoc │ │ │ ├── modulerr.ngdoc │ │ │ ├── nomod.ngdoc │ │ │ ├── pget.ngdoc │ │ │ ├── strictdi.ngdoc │ │ │ ├── undef.ngdoc │ │ │ └── unpr.ngdoc │ │ ├── $interpolate │ │ │ ├── badexpr.ngdoc │ │ │ ├── dupvalue.ngdoc │ │ │ ├── interr.ngdoc │ │ │ ├── logicbug.ngdoc │ │ │ ├── nochgmustache.ngdoc │ │ │ ├── noconcat.ngdoc │ │ │ ├── reqarg.ngdoc │ │ │ ├── reqcomma.ngdoc │ │ │ ├── reqendbrace.ngdoc │ │ │ ├── reqendinterp.ngdoc │ │ │ ├── reqopenbrace.ngdoc │ │ │ ├── reqother.ngdoc │ │ │ ├── unknarg.ngdoc │ │ │ ├── unsafe.ngdoc │ │ │ ├── untermstr.ngdoc │ │ │ └── wantstring.ngdoc │ │ ├── $interval │ │ │ └── badprom.ngdoc │ │ ├── $location │ │ │ ├── badpath.ngdoc │ │ │ ├── ipthprfx.ngdoc │ │ │ ├── isrcharg.ngdoc │ │ │ ├── nobase.ngdoc │ │ │ └── nostate.ngdoc │ │ ├── $parse │ │ │ ├── esc.ngdoc │ │ │ ├── lexerr.ngdoc │ │ │ ├── lval.ngdoc │ │ │ ├── syntax.ngdoc │ │ │ └── ueoe.ngdoc │ │ ├── $q │ │ │ ├── norslvr.ngdoc │ │ │ └── qcycle.ngdoc │ │ ├── $resource │ │ │ ├── badargs.ngdoc │ │ │ ├── badcfg.ngdoc │ │ │ ├── badmember.ngdoc │ │ │ └── badname.ngdoc │ │ ├── $rootScope │ │ │ ├── infdig.ngdoc │ │ │ └── inprog.ngdoc │ │ ├── $route │ │ │ └── norout.ngdoc │ │ ├── $sanitize │ │ │ ├── elclob.ngdoc │ │ │ ├── noinert.ngdoc │ │ │ └── uinput.ngdoc │ │ ├── $sce │ │ │ ├── icontext.ngdoc │ │ │ ├── iequirks.ngdoc │ │ │ ├── imatcher.ngdoc │ │ │ ├── insecurl.ngdoc │ │ │ ├── itype.ngdoc │ │ │ ├── iwcard.ngdoc │ │ │ └── unsafe.ngdoc │ │ ├── $templateRequest │ │ │ └── tpload.ngdoc │ │ ├── $timeout │ │ │ └── badprom.ngdoc │ │ ├── filter │ │ │ └── notarray.ngdoc │ │ ├── index.ngdoc │ │ ├── jqLite │ │ │ ├── nosel.ngdoc │ │ │ ├── offargs.ngdoc │ │ │ └── onargs.ngdoc │ │ ├── linky │ │ │ └── notstring.ngdoc │ │ ├── ng │ │ │ ├── aobj.ngdoc │ │ │ ├── areq.ngdoc │ │ │ ├── badname.ngdoc │ │ │ ├── btstrpd.ngdoc │ │ │ ├── cpi.ngdoc │ │ │ ├── cpta.ngdoc │ │ │ ├── cpws.ngdoc │ │ │ └── test.ngdoc │ │ ├── ngModel │ │ │ ├── constexpr.ngdoc │ │ │ ├── datefmt.ngdoc │ │ │ ├── nonassign.ngdoc │ │ │ ├── nopromise.ngdoc │ │ │ └── numfmt.ngdoc │ │ ├── ngOptions │ │ │ └── iexp.ngdoc │ │ ├── ngPattern │ │ │ └── noregexp.ngdoc │ │ ├── ngRef │ │ │ ├── noctrl.ngdoc │ │ │ └── nonassign.ngdoc │ │ ├── ngRepeat │ │ │ ├── badident.ngdoc │ │ │ ├── dupes.ngdoc │ │ │ ├── iexp.ngdoc │ │ │ └── iidexp.ngdoc │ │ ├── ngTransclude │ │ │ └── orphan.ngdoc │ │ └── orderBy │ │ │ └── notarray.ngdoc │ ├── guide │ │ ├── $location.ngdoc │ │ ├── accessibility.ngdoc │ │ ├── animations.ngdoc │ │ ├── bootstrap.ngdoc │ │ ├── compiler.ngdoc │ │ ├── component-router.ngdoc │ │ ├── component.ngdoc │ │ ├── concepts.ngdoc │ │ ├── controller.ngdoc │ │ ├── css-styling.ngdoc │ │ ├── databinding.ngdoc │ │ ├── decorators.ngdoc │ │ ├── di.ngdoc │ │ ├── directive.ngdoc │ │ ├── e2e-testing.ngdoc │ │ ├── expression.ngdoc │ │ ├── external-resources.ngdoc │ │ ├── filter.ngdoc │ │ ├── forms.ngdoc │ │ ├── i18n.ngdoc │ │ ├── ie.ngdoc │ │ ├── index.ngdoc │ │ ├── interpolation.ngdoc │ │ ├── introduction.ngdoc │ │ ├── migration.ngdoc │ │ ├── module.ngdoc │ │ ├── production.ngdoc │ │ ├── providers.ngdoc │ │ ├── scope.ngdoc │ │ ├── security.ngdoc │ │ ├── services.ngdoc │ │ ├── templates.ngdoc │ │ └── unit-testing.ngdoc │ ├── misc │ │ ├── contribute.ngdoc │ │ ├── downloading.ngdoc │ │ ├── faq.ngdoc │ │ ├── index.ngdoc │ │ ├── started.ngdoc │ │ └── version-support-status.ngdoc │ ├── notes │ │ └── empty.tmp │ └── tutorial │ │ ├── index.ngdoc │ │ ├── step_00.ngdoc │ │ ├── step_01.ngdoc │ │ ├── step_02.ngdoc │ │ ├── step_03.ngdoc │ │ ├── step_04.ngdoc │ │ ├── step_05.ngdoc │ │ ├── step_06.ngdoc │ │ ├── step_07.ngdoc │ │ ├── step_08.ngdoc │ │ ├── step_09.ngdoc │ │ ├── step_10.ngdoc │ │ ├── step_11.ngdoc │ │ ├── step_12.ngdoc │ │ ├── step_13.ngdoc │ │ ├── step_14.ngdoc │ │ └── the_end.ngdoc ├── gulpfile.js ├── img │ ├── One_Way_Data_Binding.png │ ├── Two_Way_Data_Binding.png │ ├── angular_parts.png │ ├── form_data_flow.png │ ├── guide │ │ ├── component-based-architecture.svg │ │ ├── component-hierarchy.svg │ │ ├── component-routes.svg │ │ ├── concepts-databinding1.png │ │ ├── concepts-databinding2.png │ │ ├── concepts-directive.png │ │ ├── concepts-module-injector.png │ │ ├── concepts-module-service.png │ │ ├── concepts-runtime.png │ │ ├── concepts-scope-watch-strategies.png │ │ ├── concepts-scope.png │ │ ├── concepts-startup.png │ │ ├── concepts-view.png │ │ ├── crisis-detail.png │ │ ├── crisis-list.png │ │ ├── di_sequence_final.png │ │ ├── dom_scope_final.png │ │ ├── forms-debounce.gif │ │ ├── forms-update-on-blur.gif │ │ ├── hashbang_vs_regular_url.jpg │ │ ├── hero-detail.png │ │ ├── heroes-list.png │ │ ├── scenario_runner.png │ │ └── simple_scope_final.png │ ├── helloworld.png │ ├── helloworld_2way.png │ └── tutorial │ │ ├── catalog_screen.png │ │ ├── tutorial_00.png │ │ ├── tutorial_02.png │ │ ├── tutorial_03.png │ │ ├── tutorial_05.png │ │ ├── tutorial_06.png │ │ ├── tutorial_09.png │ │ ├── tutorial_10.png │ │ └── tutorial_12.png └── protractor-conf.js ├── i18n ├── README.md ├── closure │ ├── currencySymbols.js │ ├── datetimeSymbols.js │ ├── datetimeSymbolsExt.js │ ├── numberSymbols.js │ ├── numberSymbolsExt.js │ └── pluralRules.js ├── e2e │ ├── .eslintrc.json │ ├── i18n-e2e.js │ ├── localeTest_cs.html │ ├── localeTest_de.html │ ├── localeTest_en.html │ ├── localeTest_es.html │ ├── localeTest_sk.html │ ├── localeTest_zh.html │ └── runner.html ├── generate.sh ├── spec │ ├── .eslintrc.json │ ├── closureI18nExtractorSpec.js │ ├── converterSpec.js │ └── parserSpec.js ├── src │ ├── .eslintrc.json │ ├── closureI18nExtractor.js │ ├── closureSlurper.js │ ├── converter.js │ └── parser.js ├── ucd │ ├── .eslintrc.json │ ├── spec │ │ ├── .eslintrc.json │ │ ├── extactValuesSpec.js │ │ └── generateCodeSpec.js │ └── src │ │ ├── extract.js │ │ ├── extractValues.js │ │ ├── generateCode.js │ │ └── ucd.all.flat.xml.gz └── update-closure.sh ├── images ├── css │ ├── arrow_left.gif │ ├── arrow_right.gif │ └── indicator-wait.png ├── docs │ ├── Diagrams.graffle │ │ ├── data.plist │ │ ├── image1.png │ │ ├── image2.png │ │ ├── image4.png │ │ ├── image8.png │ │ └── image9.png │ ├── Diagrams.svg │ │ ├── Canvas_8.svg │ │ ├── Canvas_angular___parts.svg │ │ ├── Canvas_angular___usage.svg │ │ ├── Notes.svg │ │ ├── One_Way_Data_Binding.svg │ │ ├── RESTful_URL.svg │ │ ├── RESTy.svg │ │ ├── Two_Way_Data_Binding.svg │ │ ├── image1.png │ │ ├── image2.png │ │ ├── image4.png │ │ ├── image8.png │ │ └── image9.png │ ├── Diagrams.vdx │ ├── guide │ │ ├── about_controller.graffle │ │ ├── about_controller.svg │ │ ├── about_controller.vdx │ │ ├── about_model.graffle │ │ ├── about_model.svg │ │ ├── about_model.vdx │ │ ├── concepts.graffle │ │ │ ├── data.plist │ │ │ ├── image1.png │ │ │ ├── image4.png │ │ │ └── image5.png │ │ ├── concepts.svg │ │ │ ├── Canvas_11.svg │ │ │ ├── controller.svg │ │ │ ├── databinding1.svg │ │ │ ├── databinding2.svg │ │ │ ├── directive.svg │ │ │ ├── filter.svg │ │ │ ├── image4.png │ │ │ ├── image5.png │ │ │ ├── injector-module.svg │ │ │ ├── runtime.svg │ │ │ ├── scope.svg │ │ │ ├── startup.svg │ │ │ └── view.svg │ │ ├── concepts.vdx │ │ ├── di_sequence.graffle │ │ ├── di_sequence.svg │ │ ├── di_sequence.vdx │ │ ├── dom_scope.graffle │ │ ├── dom_scope.svg │ │ ├── dom_scope.vdx │ │ ├── form_data_flow.graffle │ │ ├── form_data_flow.svg │ │ ├── form_data_flow.vdx │ │ ├── hashbang_vs_regular_url.graffle │ │ ├── hashbang_vs_regular_url.svg │ │ ├── hashbang_vs_regular_url.vdx │ │ ├── simple_scope.graffle │ │ │ ├── QuickLook │ │ │ │ ├── Preview.pdf │ │ │ │ └── Thumbnail.tiff │ │ │ ├── data.plist │ │ │ └── image7.png │ │ ├── simple_scope.svg │ │ │ ├── image7.png │ │ │ └── simple_scope.svg │ │ └── simple_scope.vdx │ └── tutorial │ │ ├── di_sequence.graffle │ │ ├── di_sequence.svg │ │ ├── di_sequence.vdx │ │ ├── simple_scope.graffle │ │ ├── QuickLook │ │ │ ├── Preview.pdf │ │ │ └── Thumbnail.tiff │ │ ├── data.plist │ │ └── image7.png │ │ ├── simple_scope.svg │ │ ├── image7.png │ │ └── simple_scope.svg │ │ ├── simple_scope.vdx │ │ ├── tutorial_00.graffle │ │ ├── tutorial_00.svg │ │ ├── tutorial_00.vdx │ │ ├── tutorial_02.graffle │ │ ├── QuickLook │ │ │ ├── Preview.pdf │ │ │ └── Thumbnail.tiff │ │ ├── data.plist │ │ └── image11.png │ │ ├── tutorial_02.svg │ │ ├── image11.png │ │ └── tutorial_02.svg │ │ ├── tutorial_02.vdx │ │ ├── tutorial_03.svg │ │ ├── image11.png │ │ └── tutorial_03.svg │ │ ├── tutorial_03.vdx │ │ ├── tutorial_04.vdx │ │ ├── tutorial_05.graffle │ │ ├── QuickLook │ │ │ ├── Preview.pdf │ │ │ └── Thumbnail.tiff │ │ ├── data.plist │ │ └── image13.png │ │ ├── tutorial_05.svg │ │ ├── image13.png │ │ └── tutorial_05.svg │ │ ├── tutorial_06.graffle │ │ ├── QuickLook │ │ │ ├── Preview.pdf │ │ │ └── Thumbnail.tiff │ │ ├── data.plist │ │ └── image15.png │ │ ├── tutorial_06.svg │ │ ├── image15.png │ │ └── tutorial_06.svg │ │ ├── tutorial_07.vdx │ │ ├── tutorial_08-09.vdx │ │ ├── tutorial_09.graffle │ │ ├── QuickLook │ │ │ ├── Preview.pdf │ │ │ └── Thumbnail.tiff │ │ ├── data.plist │ │ └── image9.png │ │ ├── tutorial_09.svg │ │ ├── image9.png │ │ └── tutorial_09.svg │ │ ├── tutorial_10-11.vdx │ │ ├── tutorial_10.graffle │ │ ├── QuickLook │ │ │ ├── Preview.pdf │ │ │ └── Thumbnail.tiff │ │ ├── data.plist │ │ └── image10.png │ │ ├── tutorial_10.svg │ │ ├── image10.png │ │ └── tutorial_10.svg │ │ ├── tutorial_12.graffle │ │ ├── QuickLook │ │ │ ├── Preview.pdf │ │ │ └── Thumbnail.tiff │ │ ├── data.plist │ │ └── image10.png │ │ ├── tutorial_12.svg │ │ ├── image10.png │ │ └── tutorial_12.svg │ │ ├── tutorial_proto.graffle │ │ ├── QuickLook │ │ │ ├── Preview.pdf │ │ │ └── Thumbnail.tiff │ │ ├── data.plist │ │ └── image7.png │ │ ├── tutorial_proto.svg │ │ ├── image7.png │ │ └── tutorial_proto.svg │ │ ├── tutorial_proto.vdx │ │ ├── xhr_service.graffle │ │ ├── xhr_service.svg │ │ └── xhr_service.vdx ├── favicon.ico └── logo │ ├── AngularJS-Shield.exports │ ├── AngularJS-Shield-huge.png │ ├── AngularJS-Shield-large.png │ ├── AngularJS-Shield-medium.png │ ├── AngularJS-Shield-small.png │ ├── AngularJS-Shield.eps │ └── AngularJS-Shield.pdf │ ├── AngularJS-Shield.graffle │ ├── AngularJS.exports │ ├── AngularJS-huge.png │ ├── AngularJS-large.png │ ├── AngularJS-medium.png │ ├── AngularJS-small.png │ ├── AngularJS.eps │ └── AngularJS.pdf │ └── AngularJS.graffle │ ├── data.plist │ ├── image1.png │ └── image2.png ├── karma-docs.conf.js ├── karma-jqlite.conf.js ├── karma-jquery-2.1.conf.js ├── karma-jquery-2.2.conf.js ├── karma-jquery.conf-factory.js ├── karma-jquery.conf.js ├── karma-modules-ngAnimate.conf.js ├── karma-modules-ngMock.conf.js ├── karma-modules.conf.js ├── karma-shared.conf.js ├── lib ├── grunt │ ├── plugins.js │ ├── utils.js │ └── validate-angular-files.js ├── promises-aplus │ └── promises-aplus-test-adapter.js ├── saucelabs │ └── sauce-service.sh └── versions │ └── version-info.js ├── logs └── .gitignore ├── package.json ├── protractor-circleci-conf.js ├── protractor-conf.js ├── protractor-shared-conf.js ├── scripts ├── angular.js │ ├── tag-release.sh │ └── untag-release.sh ├── bower │ ├── publish.sh │ ├── repos.inc │ └── unpublish.sh ├── check-size.sh ├── code.angularjs.org-firebase │ ├── .eslintrc.json │ ├── .firebaserc │ ├── firebase.json │ ├── functions │ │ ├── index.js │ │ ├── package.json │ │ └── yarn.lock │ ├── public │ │ ├── favicon.ico │ │ ├── googleb96cceae5888d79f.html │ │ └── robots.txt │ ├── readme.firebase.code.md │ └── storage.rules ├── code.angularjs.org │ ├── publish.sh │ └── unpublish.sh ├── compare-master-to-stable.js ├── docs.angularjs.org-firebase │ ├── .firebaserc │ ├── firebase.json │ ├── functions │ │ ├── index.js │ │ ├── package.json │ │ └── yarn.lock │ └── readme.firebase.docs.md ├── errors.angularjs.org-firebase │ ├── .firebaserc │ ├── firebase.json │ └── public │ │ └── 404.html ├── release │ ├── release.sh │ └── undo-release.sh └── utils.inc ├── src ├── .eslintrc.json ├── Angular.js ├── AngularPublic.js ├── angular.bind.js ├── angular.prefix ├── angular.suffix ├── apis.js ├── auto │ └── injector.js ├── jqLite.js ├── loader.js ├── loader.prefix ├── loader.suffix ├── minErr.js ├── module.prefix ├── module.suffix ├── ng │ ├── anchorScroll.js │ ├── animate.js │ ├── animateCss.js │ ├── animateRunner.js │ ├── browser.js │ ├── cacheFactory.js │ ├── compile.js │ ├── controller.js │ ├── cookieReader.js │ ├── directive │ │ ├── a.js │ │ ├── attrs.js │ │ ├── directives.js │ │ ├── form.js │ │ ├── input.js │ │ ├── ngBind.js │ │ ├── ngChange.js │ │ ├── ngClass.js │ │ ├── ngCloak.js │ │ ├── ngController.js │ │ ├── ngCsp.js │ │ ├── ngEventDirs.js │ │ ├── ngIf.js │ │ ├── ngInclude.js │ │ ├── ngInit.js │ │ ├── ngList.js │ │ ├── ngModel.js │ │ ├── ngModelOptions.js │ │ ├── ngNonBindable.js │ │ ├── ngOptions.js │ │ ├── ngPluralize.js │ │ ├── ngRef.js │ │ ├── ngRepeat.js │ │ ├── ngShowHide.js │ │ ├── ngStyle.js │ │ ├── ngSwitch.js │ │ ├── ngTransclude.js │ │ ├── script.js │ │ ├── select.js │ │ └── validators.js │ ├── document.js │ ├── exceptionHandler.js │ ├── filter.js │ ├── filter │ │ ├── filter.js │ │ ├── filters.js │ │ ├── limitTo.js │ │ └── orderBy.js │ ├── forceReflow.js │ ├── http.js │ ├── httpBackend.js │ ├── interpolate.js │ ├── interval.js │ ├── intervalFactory.js │ ├── jsonpCallbacks.js │ ├── locale.js │ ├── location.js │ ├── log.js │ ├── parse.js │ ├── q.js │ ├── raf.js │ ├── rootElement.js │ ├── rootScope.js │ ├── sanitizeUri.js │ ├── sce.js │ ├── sniffer.js │ ├── taskTrackerFactory.js │ ├── templateRequest.js │ ├── testability.js │ ├── timeout.js │ ├── urlUtils.js │ └── window.js ├── ngAnimate │ ├── .eslintrc.json │ ├── animateCache.js │ ├── animateChildrenDirective.js │ ├── animateCss.js │ ├── animateCssDriver.js │ ├── animateJs.js │ ├── animateJsDriver.js │ ├── animateQueue.js │ ├── animation.js │ ├── module.js │ ├── ngAnimateSwap.js │ ├── rafScheduler.js │ └── shared.js ├── ngAria │ └── aria.js ├── ngComponentRouter │ └── Router.js ├── ngCookies │ ├── cookieWriter.js │ └── cookies.js ├── ngLocale │ ├── .eslintrc.json │ ├── angular-locale_af-na.js │ ├── angular-locale_af-za.js │ ├── angular-locale_af.js │ ├── angular-locale_agq-cm.js │ ├── angular-locale_agq.js │ ├── angular-locale_ak-gh.js │ ├── angular-locale_ak.js │ ├── angular-locale_am-et.js │ ├── angular-locale_am.js │ ├── angular-locale_ar-001.js │ ├── angular-locale_ar-ae.js │ ├── angular-locale_ar-bh.js │ ├── angular-locale_ar-dj.js │ ├── angular-locale_ar-dz.js │ ├── angular-locale_ar-eg.js │ ├── angular-locale_ar-eh.js │ ├── angular-locale_ar-er.js │ ├── angular-locale_ar-il.js │ ├── angular-locale_ar-iq.js │ ├── angular-locale_ar-jo.js │ ├── angular-locale_ar-km.js │ ├── angular-locale_ar-kw.js │ ├── angular-locale_ar-lb.js │ ├── angular-locale_ar-ly.js │ ├── angular-locale_ar-ma.js │ ├── angular-locale_ar-mr.js │ ├── angular-locale_ar-om.js │ ├── angular-locale_ar-ps.js │ ├── angular-locale_ar-qa.js │ ├── angular-locale_ar-sa.js │ ├── angular-locale_ar-sd.js │ ├── angular-locale_ar-so.js │ ├── angular-locale_ar-ss.js │ ├── angular-locale_ar-sy.js │ ├── angular-locale_ar-td.js │ ├── angular-locale_ar-tn.js │ ├── angular-locale_ar-xb.js │ ├── angular-locale_ar-ye.js │ ├── angular-locale_ar.js │ ├── angular-locale_as-in.js │ ├── angular-locale_as.js │ ├── angular-locale_asa-tz.js │ ├── angular-locale_asa.js │ ├── angular-locale_ast-es.js │ ├── angular-locale_ast.js │ ├── angular-locale_az-cyrl-az.js │ ├── angular-locale_az-cyrl.js │ ├── angular-locale_az-latn-az.js │ ├── angular-locale_az-latn.js │ ├── angular-locale_az.js │ ├── angular-locale_bas-cm.js │ ├── angular-locale_bas.js │ ├── angular-locale_be-by.js │ ├── angular-locale_be.js │ ├── angular-locale_bem-zm.js │ ├── angular-locale_bem.js │ ├── angular-locale_bez-tz.js │ ├── angular-locale_bez.js │ ├── angular-locale_bg-bg.js │ ├── angular-locale_bg.js │ ├── angular-locale_bm-ml.js │ ├── angular-locale_bm.js │ ├── angular-locale_bn-bd.js │ ├── angular-locale_bn-in.js │ ├── angular-locale_bn.js │ ├── angular-locale_bo-cn.js │ ├── angular-locale_bo-in.js │ ├── angular-locale_bo.js │ ├── angular-locale_br-fr.js │ ├── angular-locale_br.js │ ├── angular-locale_brx-in.js │ ├── angular-locale_brx.js │ ├── angular-locale_bs-cyrl-ba.js │ ├── angular-locale_bs-cyrl.js │ ├── angular-locale_bs-latn-ba.js │ ├── angular-locale_bs-latn.js │ ├── angular-locale_bs.js │ ├── angular-locale_ca-ad.js │ ├── angular-locale_ca-es-valencia.js │ ├── angular-locale_ca-es.js │ ├── angular-locale_ca-fr.js │ ├── angular-locale_ca-it.js │ ├── angular-locale_ca.js │ ├── angular-locale_ce-ru.js │ ├── angular-locale_ce.js │ ├── angular-locale_cgg-ug.js │ ├── angular-locale_cgg.js │ ├── angular-locale_chr-us.js │ ├── angular-locale_chr.js │ ├── angular-locale_ckb-arab-iq.js │ ├── angular-locale_ckb-arab-ir.js │ ├── angular-locale_ckb-arab.js │ ├── angular-locale_ckb-iq.js │ ├── angular-locale_ckb-ir.js │ ├── angular-locale_ckb-latn-iq.js │ ├── angular-locale_ckb-latn.js │ ├── angular-locale_ckb.js │ ├── angular-locale_cs-cz.js │ ├── angular-locale_cs.js │ ├── angular-locale_cu-ru.js │ ├── angular-locale_cu.js │ ├── angular-locale_cy-gb.js │ ├── angular-locale_cy.js │ ├── angular-locale_da-dk.js │ ├── angular-locale_da-gl.js │ ├── angular-locale_da.js │ ├── angular-locale_dav-ke.js │ ├── angular-locale_dav.js │ ├── angular-locale_de-at.js │ ├── angular-locale_de-be.js │ ├── angular-locale_de-ch.js │ ├── angular-locale_de-de.js │ ├── angular-locale_de-it.js │ ├── angular-locale_de-li.js │ ├── angular-locale_de-lu.js │ ├── angular-locale_de.js │ ├── angular-locale_dje-ne.js │ ├── angular-locale_dje.js │ ├── angular-locale_dsb-de.js │ ├── angular-locale_dsb.js │ ├── angular-locale_dua-cm.js │ ├── angular-locale_dua.js │ ├── angular-locale_dyo-sn.js │ ├── angular-locale_dyo.js │ ├── angular-locale_dz-bt.js │ ├── angular-locale_dz.js │ ├── angular-locale_ebu-ke.js │ ├── angular-locale_ebu.js │ ├── angular-locale_ee-gh.js │ ├── angular-locale_ee-tg.js │ ├── angular-locale_ee.js │ ├── angular-locale_el-cy.js │ ├── angular-locale_el-gr.js │ ├── angular-locale_el.js │ ├── angular-locale_en-001.js │ ├── angular-locale_en-150.js │ ├── angular-locale_en-ag.js │ ├── angular-locale_en-ai.js │ ├── angular-locale_en-as.js │ ├── angular-locale_en-at.js │ ├── angular-locale_en-au.js │ ├── angular-locale_en-bb.js │ ├── angular-locale_en-be.js │ ├── angular-locale_en-bi.js │ ├── angular-locale_en-bm.js │ ├── angular-locale_en-bs.js │ ├── angular-locale_en-bw.js │ ├── angular-locale_en-bz.js │ ├── angular-locale_en-ca.js │ ├── angular-locale_en-cc.js │ ├── angular-locale_en-ch.js │ ├── angular-locale_en-ck.js │ ├── angular-locale_en-cm.js │ ├── angular-locale_en-cx.js │ ├── angular-locale_en-cy.js │ ├── angular-locale_en-de.js │ ├── angular-locale_en-dg.js │ ├── angular-locale_en-dk.js │ ├── angular-locale_en-dm.js │ ├── angular-locale_en-er.js │ ├── angular-locale_en-fi.js │ ├── angular-locale_en-fj.js │ ├── angular-locale_en-fk.js │ ├── angular-locale_en-fm.js │ ├── angular-locale_en-gb.js │ ├── angular-locale_en-gd.js │ ├── angular-locale_en-gg.js │ ├── angular-locale_en-gh.js │ ├── angular-locale_en-gi.js │ ├── angular-locale_en-gm.js │ ├── angular-locale_en-gu.js │ ├── angular-locale_en-gy.js │ ├── angular-locale_en-hk.js │ ├── angular-locale_en-ie.js │ ├── angular-locale_en-il.js │ ├── angular-locale_en-im.js │ ├── angular-locale_en-in.js │ ├── angular-locale_en-io.js │ ├── angular-locale_en-iso.js │ ├── angular-locale_en-je.js │ ├── angular-locale_en-jm.js │ ├── angular-locale_en-ke.js │ ├── angular-locale_en-ki.js │ ├── angular-locale_en-kn.js │ ├── angular-locale_en-ky.js │ ├── angular-locale_en-lc.js │ ├── angular-locale_en-lr.js │ ├── angular-locale_en-ls.js │ ├── angular-locale_en-mg.js │ ├── angular-locale_en-mh.js │ ├── angular-locale_en-mo.js │ ├── angular-locale_en-mp.js │ ├── angular-locale_en-ms.js │ ├── angular-locale_en-mt.js │ ├── angular-locale_en-mu.js │ ├── angular-locale_en-mw.js │ ├── angular-locale_en-my.js │ ├── angular-locale_en-na.js │ ├── angular-locale_en-nf.js │ ├── angular-locale_en-ng.js │ ├── angular-locale_en-nl.js │ ├── angular-locale_en-nr.js │ ├── angular-locale_en-nu.js │ ├── angular-locale_en-nz.js │ ├── angular-locale_en-pg.js │ ├── angular-locale_en-ph.js │ ├── angular-locale_en-pk.js │ ├── angular-locale_en-pn.js │ ├── angular-locale_en-pr.js │ ├── angular-locale_en-pw.js │ ├── angular-locale_en-rw.js │ ├── angular-locale_en-sb.js │ ├── angular-locale_en-sc.js │ ├── angular-locale_en-sd.js │ ├── angular-locale_en-se.js │ ├── angular-locale_en-sg.js │ ├── angular-locale_en-sh.js │ ├── angular-locale_en-si.js │ ├── angular-locale_en-sl.js │ ├── angular-locale_en-ss.js │ ├── angular-locale_en-sx.js │ ├── angular-locale_en-sz.js │ ├── angular-locale_en-tc.js │ ├── angular-locale_en-tk.js │ ├── angular-locale_en-to.js │ ├── angular-locale_en-tt.js │ ├── angular-locale_en-tv.js │ ├── angular-locale_en-tz.js │ ├── angular-locale_en-ug.js │ ├── angular-locale_en-um.js │ ├── angular-locale_en-us-posix.js │ ├── angular-locale_en-us.js │ ├── angular-locale_en-vc.js │ ├── angular-locale_en-vg.js │ ├── angular-locale_en-vi.js │ ├── angular-locale_en-vu.js │ ├── angular-locale_en-ws.js │ ├── angular-locale_en-xa.js │ ├── angular-locale_en-za.js │ ├── angular-locale_en-zm.js │ ├── angular-locale_en-zw.js │ ├── angular-locale_en.js │ ├── angular-locale_eo-001.js │ ├── angular-locale_eo.js │ ├── angular-locale_es-419.js │ ├── angular-locale_es-ar.js │ ├── angular-locale_es-bo.js │ ├── angular-locale_es-br.js │ ├── angular-locale_es-bz.js │ ├── angular-locale_es-cl.js │ ├── angular-locale_es-co.js │ ├── angular-locale_es-cr.js │ ├── angular-locale_es-cu.js │ ├── angular-locale_es-do.js │ ├── angular-locale_es-ea.js │ ├── angular-locale_es-ec.js │ ├── angular-locale_es-es.js │ ├── angular-locale_es-gq.js │ ├── angular-locale_es-gt.js │ ├── angular-locale_es-hn.js │ ├── angular-locale_es-ic.js │ ├── angular-locale_es-mx.js │ ├── angular-locale_es-ni.js │ ├── angular-locale_es-pa.js │ ├── angular-locale_es-pe.js │ ├── angular-locale_es-ph.js │ ├── angular-locale_es-pr.js │ ├── angular-locale_es-py.js │ ├── angular-locale_es-sv.js │ ├── angular-locale_es-us.js │ ├── angular-locale_es-uy.js │ ├── angular-locale_es-ve.js │ ├── angular-locale_es.js │ ├── angular-locale_et-ee.js │ ├── angular-locale_et.js │ ├── angular-locale_eu-es.js │ ├── angular-locale_eu.js │ ├── angular-locale_ewo-cm.js │ ├── angular-locale_ewo.js │ ├── angular-locale_fa-af.js │ ├── angular-locale_fa-ir.js │ ├── angular-locale_fa.js │ ├── angular-locale_ff-cm.js │ ├── angular-locale_ff-gn.js │ ├── angular-locale_ff-mr.js │ ├── angular-locale_ff-sn.js │ ├── angular-locale_ff.js │ ├── angular-locale_fi-fi.js │ ├── angular-locale_fi.js │ ├── angular-locale_fil-ph.js │ ├── angular-locale_fil.js │ ├── angular-locale_fo-dk.js │ ├── angular-locale_fo-fo.js │ ├── angular-locale_fo.js │ ├── angular-locale_fr-be.js │ ├── angular-locale_fr-bf.js │ ├── angular-locale_fr-bi.js │ ├── angular-locale_fr-bj.js │ ├── angular-locale_fr-bl.js │ ├── angular-locale_fr-ca.js │ ├── angular-locale_fr-cd.js │ ├── angular-locale_fr-cf.js │ ├── angular-locale_fr-cg.js │ ├── angular-locale_fr-ch.js │ ├── angular-locale_fr-ci.js │ ├── angular-locale_fr-cm.js │ ├── angular-locale_fr-dj.js │ ├── angular-locale_fr-dz.js │ ├── angular-locale_fr-fr.js │ ├── angular-locale_fr-ga.js │ ├── angular-locale_fr-gf.js │ ├── angular-locale_fr-gn.js │ ├── angular-locale_fr-gp.js │ ├── angular-locale_fr-gq.js │ ├── angular-locale_fr-ht.js │ ├── angular-locale_fr-km.js │ ├── angular-locale_fr-lu.js │ ├── angular-locale_fr-ma.js │ ├── angular-locale_fr-mc.js │ ├── angular-locale_fr-mf.js │ ├── angular-locale_fr-mg.js │ ├── angular-locale_fr-ml.js │ ├── angular-locale_fr-mq.js │ ├── angular-locale_fr-mr.js │ ├── angular-locale_fr-mu.js │ ├── angular-locale_fr-nc.js │ ├── angular-locale_fr-ne.js │ ├── angular-locale_fr-pf.js │ ├── angular-locale_fr-pm.js │ ├── angular-locale_fr-re.js │ ├── angular-locale_fr-rw.js │ ├── angular-locale_fr-sc.js │ ├── angular-locale_fr-sn.js │ ├── angular-locale_fr-sy.js │ ├── angular-locale_fr-td.js │ ├── angular-locale_fr-tg.js │ ├── angular-locale_fr-tn.js │ ├── angular-locale_fr-vu.js │ ├── angular-locale_fr-wf.js │ ├── angular-locale_fr-yt.js │ ├── angular-locale_fr.js │ ├── angular-locale_fur-it.js │ ├── angular-locale_fur.js │ ├── angular-locale_fy-nl.js │ ├── angular-locale_fy.js │ ├── angular-locale_ga-ie.js │ ├── angular-locale_ga.js │ ├── angular-locale_gd-gb.js │ ├── angular-locale_gd.js │ ├── angular-locale_gl-es.js │ ├── angular-locale_gl.js │ ├── angular-locale_gsw-ch.js │ ├── angular-locale_gsw-fr.js │ ├── angular-locale_gsw-li.js │ ├── angular-locale_gsw.js │ ├── angular-locale_gu-in.js │ ├── angular-locale_gu.js │ ├── angular-locale_guz-ke.js │ ├── angular-locale_guz.js │ ├── angular-locale_gv-im.js │ ├── angular-locale_gv.js │ ├── angular-locale_ha-gh.js │ ├── angular-locale_ha-ne.js │ ├── angular-locale_ha-ng.js │ ├── angular-locale_ha.js │ ├── angular-locale_haw-us.js │ ├── angular-locale_haw.js │ ├── angular-locale_he-il.js │ ├── angular-locale_he.js │ ├── angular-locale_hi-in.js │ ├── angular-locale_hi.js │ ├── angular-locale_hr-ba.js │ ├── angular-locale_hr-hr.js │ ├── angular-locale_hr.js │ ├── angular-locale_hsb-de.js │ ├── angular-locale_hsb.js │ ├── angular-locale_hu-hu.js │ ├── angular-locale_hu.js │ ├── angular-locale_hy-am.js │ ├── angular-locale_hy.js │ ├── angular-locale_id-id.js │ ├── angular-locale_id.js │ ├── angular-locale_ig-ng.js │ ├── angular-locale_ig.js │ ├── angular-locale_ii-cn.js │ ├── angular-locale_ii.js │ ├── angular-locale_in.js │ ├── angular-locale_is-is.js │ ├── angular-locale_is.js │ ├── angular-locale_it-ch.js │ ├── angular-locale_it-it.js │ ├── angular-locale_it-sm.js │ ├── angular-locale_it-va.js │ ├── angular-locale_it.js │ ├── angular-locale_iw.js │ ├── angular-locale_ja-jp.js │ ├── angular-locale_ja.js │ ├── angular-locale_jgo-cm.js │ ├── angular-locale_jgo.js │ ├── angular-locale_jmc-tz.js │ ├── angular-locale_jmc.js │ ├── angular-locale_ka-ge.js │ ├── angular-locale_ka.js │ ├── angular-locale_kab-dz.js │ ├── angular-locale_kab.js │ ├── angular-locale_kam-ke.js │ ├── angular-locale_kam.js │ ├── angular-locale_kde-tz.js │ ├── angular-locale_kde.js │ ├── angular-locale_kea-cv.js │ ├── angular-locale_kea.js │ ├── angular-locale_khq-ml.js │ ├── angular-locale_khq.js │ ├── angular-locale_ki-ke.js │ ├── angular-locale_ki.js │ ├── angular-locale_kk-kz.js │ ├── angular-locale_kk.js │ ├── angular-locale_kkj-cm.js │ ├── angular-locale_kkj.js │ ├── angular-locale_kl-gl.js │ ├── angular-locale_kl.js │ ├── angular-locale_kln-ke.js │ ├── angular-locale_kln.js │ ├── angular-locale_km-kh.js │ ├── angular-locale_km.js │ ├── angular-locale_kn-in.js │ ├── angular-locale_kn.js │ ├── angular-locale_ko-kp.js │ ├── angular-locale_ko-kr.js │ ├── angular-locale_ko.js │ ├── angular-locale_kok-in.js │ ├── angular-locale_kok.js │ ├── angular-locale_ks-in.js │ ├── angular-locale_ks.js │ ├── angular-locale_ksb-tz.js │ ├── angular-locale_ksb.js │ ├── angular-locale_ksf-cm.js │ ├── angular-locale_ksf.js │ ├── angular-locale_ksh-de.js │ ├── angular-locale_ksh.js │ ├── angular-locale_kw-gb.js │ ├── angular-locale_kw.js │ ├── angular-locale_ky-kg.js │ ├── angular-locale_ky.js │ ├── angular-locale_lag-tz.js │ ├── angular-locale_lag.js │ ├── angular-locale_lb-lu.js │ ├── angular-locale_lb.js │ ├── angular-locale_lg-ug.js │ ├── angular-locale_lg.js │ ├── angular-locale_lkt-us.js │ ├── angular-locale_lkt.js │ ├── angular-locale_ln-ao.js │ ├── angular-locale_ln-cd.js │ ├── angular-locale_ln-cf.js │ ├── angular-locale_ln-cg.js │ ├── angular-locale_ln.js │ ├── angular-locale_lo-la.js │ ├── angular-locale_lo.js │ ├── angular-locale_lrc-iq.js │ ├── angular-locale_lrc-ir.js │ ├── angular-locale_lrc.js │ ├── angular-locale_lt-lt.js │ ├── angular-locale_lt.js │ ├── angular-locale_lu-cd.js │ ├── angular-locale_lu.js │ ├── angular-locale_luo-ke.js │ ├── angular-locale_luo.js │ ├── angular-locale_luy-ke.js │ ├── angular-locale_luy.js │ ├── angular-locale_lv-lv.js │ ├── angular-locale_lv.js │ ├── angular-locale_mas-ke.js │ ├── angular-locale_mas-tz.js │ ├── angular-locale_mas.js │ ├── angular-locale_mer-ke.js │ ├── angular-locale_mer.js │ ├── angular-locale_mfe-mu.js │ ├── angular-locale_mfe.js │ ├── angular-locale_mg-mg.js │ ├── angular-locale_mg.js │ ├── angular-locale_mgh-mz.js │ ├── angular-locale_mgh.js │ ├── angular-locale_mgo-cm.js │ ├── angular-locale_mgo.js │ ├── angular-locale_mk-mk.js │ ├── angular-locale_mk.js │ ├── angular-locale_ml-in.js │ ├── angular-locale_ml.js │ ├── angular-locale_mn-mn.js │ ├── angular-locale_mn.js │ ├── angular-locale_mo.js │ ├── angular-locale_mr-in.js │ ├── angular-locale_mr.js │ ├── angular-locale_ms-bn.js │ ├── angular-locale_ms-my.js │ ├── angular-locale_ms-sg.js │ ├── angular-locale_ms.js │ ├── angular-locale_mt-mt.js │ ├── angular-locale_mt.js │ ├── angular-locale_mua-cm.js │ ├── angular-locale_mua.js │ ├── angular-locale_my-mm.js │ ├── angular-locale_my.js │ ├── angular-locale_mzn-ir.js │ ├── angular-locale_mzn.js │ ├── angular-locale_naq-na.js │ ├── angular-locale_naq.js │ ├── angular-locale_nb-no.js │ ├── angular-locale_nb-sj.js │ ├── angular-locale_nb.js │ ├── angular-locale_nd-zw.js │ ├── angular-locale_nd.js │ ├── angular-locale_nds-de.js │ ├── angular-locale_nds-nl.js │ ├── angular-locale_nds.js │ ├── angular-locale_ne-in.js │ ├── angular-locale_ne-np.js │ ├── angular-locale_ne.js │ ├── angular-locale_nl-aw.js │ ├── angular-locale_nl-be.js │ ├── angular-locale_nl-bq.js │ ├── angular-locale_nl-cw.js │ ├── angular-locale_nl-nl.js │ ├── angular-locale_nl-sr.js │ ├── angular-locale_nl-sx.js │ ├── angular-locale_nl.js │ ├── angular-locale_nmg-cm.js │ ├── angular-locale_nmg.js │ ├── angular-locale_nn-no.js │ ├── angular-locale_nn.js │ ├── angular-locale_nnh-cm.js │ ├── angular-locale_nnh.js │ ├── angular-locale_no-no.js │ ├── angular-locale_no.js │ ├── angular-locale_nus-ss.js │ ├── angular-locale_nus.js │ ├── angular-locale_nyn-ug.js │ ├── angular-locale_nyn.js │ ├── angular-locale_om-et.js │ ├── angular-locale_om-ke.js │ ├── angular-locale_om.js │ ├── angular-locale_or-in.js │ ├── angular-locale_or.js │ ├── angular-locale_os-ge.js │ ├── angular-locale_os-ru.js │ ├── angular-locale_os.js │ ├── angular-locale_pa-arab-pk.js │ ├── angular-locale_pa-arab.js │ ├── angular-locale_pa-guru-in.js │ ├── angular-locale_pa-guru.js │ ├── angular-locale_pa.js │ ├── angular-locale_pl-pl.js │ ├── angular-locale_pl.js │ ├── angular-locale_prg-001.js │ ├── angular-locale_prg.js │ ├── angular-locale_ps-af.js │ ├── angular-locale_ps.js │ ├── angular-locale_pt-ao.js │ ├── angular-locale_pt-br.js │ ├── angular-locale_pt-ch.js │ ├── angular-locale_pt-cv.js │ ├── angular-locale_pt-gq.js │ ├── angular-locale_pt-gw.js │ ├── angular-locale_pt-lu.js │ ├── angular-locale_pt-mo.js │ ├── angular-locale_pt-mz.js │ ├── angular-locale_pt-pt.js │ ├── angular-locale_pt-st.js │ ├── angular-locale_pt-tl.js │ ├── angular-locale_pt.js │ ├── angular-locale_qu-bo.js │ ├── angular-locale_qu-ec.js │ ├── angular-locale_qu-pe.js │ ├── angular-locale_qu.js │ ├── angular-locale_rm-ch.js │ ├── angular-locale_rm.js │ ├── angular-locale_rn-bi.js │ ├── angular-locale_rn.js │ ├── angular-locale_ro-md.js │ ├── angular-locale_ro-ro.js │ ├── angular-locale_ro.js │ ├── angular-locale_rof-tz.js │ ├── angular-locale_rof.js │ ├── angular-locale_ru-by.js │ ├── angular-locale_ru-kg.js │ ├── angular-locale_ru-kz.js │ ├── angular-locale_ru-md.js │ ├── angular-locale_ru-ru.js │ ├── angular-locale_ru-ua.js │ ├── angular-locale_ru.js │ ├── angular-locale_rw-rw.js │ ├── angular-locale_rw.js │ ├── angular-locale_rwk-tz.js │ ├── angular-locale_rwk.js │ ├── angular-locale_sah-ru.js │ ├── angular-locale_sah.js │ ├── angular-locale_saq-ke.js │ ├── angular-locale_saq.js │ ├── angular-locale_sbp-tz.js │ ├── angular-locale_sbp.js │ ├── angular-locale_se-fi.js │ ├── angular-locale_se-no.js │ ├── angular-locale_se-se.js │ ├── angular-locale_se.js │ ├── angular-locale_seh-mz.js │ ├── angular-locale_seh.js │ ├── angular-locale_ses-ml.js │ ├── angular-locale_ses.js │ ├── angular-locale_sg-cf.js │ ├── angular-locale_sg.js │ ├── angular-locale_sh.js │ ├── angular-locale_shi-latn-ma.js │ ├── angular-locale_shi-latn.js │ ├── angular-locale_shi-tfng-ma.js │ ├── angular-locale_shi-tfng.js │ ├── angular-locale_shi.js │ ├── angular-locale_si-lk.js │ ├── angular-locale_si.js │ ├── angular-locale_sk-sk.js │ ├── angular-locale_sk.js │ ├── angular-locale_sl-si.js │ ├── angular-locale_sl.js │ ├── angular-locale_smn-fi.js │ ├── angular-locale_smn.js │ ├── angular-locale_sn-zw.js │ ├── angular-locale_sn.js │ ├── angular-locale_so-dj.js │ ├── angular-locale_so-et.js │ ├── angular-locale_so-ke.js │ ├── angular-locale_so-so.js │ ├── angular-locale_so.js │ ├── angular-locale_sq-al.js │ ├── angular-locale_sq-mk.js │ ├── angular-locale_sq-xk.js │ ├── angular-locale_sq.js │ ├── angular-locale_sr-cyrl-ba.js │ ├── angular-locale_sr-cyrl-me.js │ ├── angular-locale_sr-cyrl-rs.js │ ├── angular-locale_sr-cyrl-xk.js │ ├── angular-locale_sr-cyrl.js │ ├── angular-locale_sr-latn-ba.js │ ├── angular-locale_sr-latn-me.js │ ├── angular-locale_sr-latn-rs.js │ ├── angular-locale_sr-latn-xk.js │ ├── angular-locale_sr-latn.js │ ├── angular-locale_sr.js │ ├── angular-locale_sv-ax.js │ ├── angular-locale_sv-fi.js │ ├── angular-locale_sv-se.js │ ├── angular-locale_sv.js │ ├── angular-locale_sw-cd.js │ ├── angular-locale_sw-ke.js │ ├── angular-locale_sw-tz.js │ ├── angular-locale_sw-ug.js │ ├── angular-locale_sw.js │ ├── angular-locale_ta-in.js │ ├── angular-locale_ta-lk.js │ ├── angular-locale_ta-my.js │ ├── angular-locale_ta-sg.js │ ├── angular-locale_ta.js │ ├── angular-locale_te-in.js │ ├── angular-locale_te.js │ ├── angular-locale_teo-ke.js │ ├── angular-locale_teo-ug.js │ ├── angular-locale_teo.js │ ├── angular-locale_th-th.js │ ├── angular-locale_th.js │ ├── angular-locale_ti-er.js │ ├── angular-locale_ti-et.js │ ├── angular-locale_ti.js │ ├── angular-locale_tk-tm.js │ ├── angular-locale_tk.js │ ├── angular-locale_tl.js │ ├── angular-locale_to-to.js │ ├── angular-locale_to.js │ ├── angular-locale_tr-cy.js │ ├── angular-locale_tr-tr.js │ ├── angular-locale_tr.js │ ├── angular-locale_twq-ne.js │ ├── angular-locale_twq.js │ ├── angular-locale_tzm-ma.js │ ├── angular-locale_tzm.js │ ├── angular-locale_ug-cn.js │ ├── angular-locale_ug.js │ ├── angular-locale_uk-ua.js │ ├── angular-locale_uk.js │ ├── angular-locale_ur-in.js │ ├── angular-locale_ur-pk.js │ ├── angular-locale_ur.js │ ├── angular-locale_uz-arab-af.js │ ├── angular-locale_uz-arab.js │ ├── angular-locale_uz-cyrl-uz.js │ ├── angular-locale_uz-cyrl.js │ ├── angular-locale_uz-latn-uz.js │ ├── angular-locale_uz-latn.js │ ├── angular-locale_uz.js │ ├── angular-locale_vai-latn-lr.js │ ├── angular-locale_vai-latn.js │ ├── angular-locale_vai-vaii-lr.js │ ├── angular-locale_vai-vaii.js │ ├── angular-locale_vai.js │ ├── angular-locale_vi-vn.js │ ├── angular-locale_vi.js │ ├── angular-locale_vo-001.js │ ├── angular-locale_vo.js │ ├── angular-locale_vun-tz.js │ ├── angular-locale_vun.js │ ├── angular-locale_wae-ch.js │ ├── angular-locale_wae.js │ ├── angular-locale_xog-ug.js │ ├── angular-locale_xog.js │ ├── angular-locale_yav-cm.js │ ├── angular-locale_yav.js │ ├── angular-locale_yi-001.js │ ├── angular-locale_yi.js │ ├── angular-locale_yo-bj.js │ ├── angular-locale_yo-ng.js │ ├── angular-locale_yo.js │ ├── angular-locale_yue-hk.js │ ├── angular-locale_yue.js │ ├── angular-locale_zgh-ma.js │ ├── angular-locale_zgh.js │ ├── angular-locale_zh-cn.js │ ├── angular-locale_zh-hans-cn.js │ ├── angular-locale_zh-hans-hk.js │ ├── angular-locale_zh-hans-mo.js │ ├── angular-locale_zh-hans-sg.js │ ├── angular-locale_zh-hans.js │ ├── angular-locale_zh-hant-hk.js │ ├── angular-locale_zh-hant-mo.js │ ├── angular-locale_zh-hant-tw.js │ ├── angular-locale_zh-hant.js │ ├── angular-locale_zh-hk.js │ ├── angular-locale_zh-tw.js │ ├── angular-locale_zh.js │ ├── angular-locale_zu-za.js │ └── angular-locale_zu.js ├── ngMessageFormat │ ├── .eslintrc.json │ ├── messageFormatCommon.js │ ├── messageFormatInterpolationParts.js │ ├── messageFormatParser.js │ ├── messageFormatSelector.js │ └── messageFormatService.js ├── ngMessages │ └── messages.js ├── ngMock │ ├── .eslintrc.json │ ├── angular-mocks.js │ └── browserTrigger.js ├── ngParseExt │ ├── module.js │ └── ucd.js ├── ngResource │ └── resource.js ├── ngRoute │ ├── .eslintrc.json │ ├── directive │ │ └── ngView.js │ ├── route.js │ └── routeParams.js ├── ngSanitize │ ├── .eslintrc.json │ ├── filter │ │ └── linky.js │ └── sanitize.js ├── ngTouch │ ├── .eslintrc.json │ ├── directive │ │ └── ngSwipe.js │ ├── swipe.js │ └── touch.js ├── publishExternalApis.js ├── routeToRegExp.js ├── shallowCopy.js └── stringify.js ├── test ├── .eslintrc.json ├── AngularSpec.js ├── ApiSpecs.js ├── BinderSpec.js ├── auto │ └── injectorSpec.js ├── e2e │ ├── fixtures │ │ ├── .eslintrc.json │ │ ├── anchor-scroll-y-offset │ │ │ ├── index.html │ │ │ └── script.js │ │ ├── anchor-scroll │ │ │ ├── index.html │ │ │ └── script.js │ │ ├── angularjs-already-loaded │ │ │ ├── index.html │ │ │ └── script.js │ │ ├── back2dom │ │ │ ├── index.html │ │ │ └── script.js │ │ ├── base-tag │ │ │ ├── index.html │ │ │ └── script.js │ │ ├── directive-require-html │ │ │ ├── index.html │ │ │ └── script.js │ │ ├── http │ │ │ ├── index.html │ │ │ └── script.js │ │ ├── input-hidden │ │ │ └── index.html │ │ ├── loader │ │ │ ├── index.html │ │ │ └── script.js │ │ ├── ng-jq-jquery │ │ │ ├── index.html │ │ │ └── script.js │ │ ├── ng-jq │ │ │ ├── index.html │ │ │ └── script.js │ │ ├── ng-route-promise │ │ │ ├── index.html │ │ │ └── script.js │ │ ├── ready │ │ │ ├── index.html │ │ │ └── script.js │ │ ├── sample │ │ │ ├── index.html │ │ │ └── script.js │ │ └── version │ │ │ └── index.html │ ├── tests │ │ ├── .eslintrc.json │ │ ├── anchor-scroll.spec.js │ │ ├── angularjs-already-loaded.spec.js │ │ ├── base-tag.spec.js │ │ ├── directive-require-html.spec.js │ │ ├── helpers │ │ │ └── main.js │ │ ├── http.spec.js │ │ ├── input-hidden.spec.js │ │ ├── loader.spec.js │ │ ├── ng-jq.spec.js │ │ ├── ng-route-promise.spec.js │ │ ├── ready.spec.js │ │ ├── sample.spec.js │ │ └── version.spec.js │ └── tools │ │ ├── .eslintrc.json │ │ ├── fixture.js │ │ ├── index.js │ │ ├── middleware.js │ │ └── util.js ├── helpers │ ├── matchers.js │ ├── privateMocks.js │ ├── privateMocksSpec.js │ ├── support.js │ ├── supportSpec.js │ └── testabilityPatch.js ├── jQueryPatchSpec.js ├── jqLiteSpec.js ├── jquery_alias.js ├── jquery_remove.js ├── loaderSpec.js ├── minErrSpec.js ├── modules │ └── no_bootstrap.js ├── ng │ ├── anchorScrollSpec.js │ ├── animateCssSpec.js │ ├── animateRunnerSpec.js │ ├── animateSpec.js │ ├── browserSpecs.js │ ├── cacheFactorySpec.js │ ├── compileSpec.js │ ├── controllerSpec.js │ ├── cookieReaderSpec.js │ ├── directive │ │ ├── aSpec.js │ │ ├── booleanAttrsSpec.js │ │ ├── formSpec.js │ │ ├── inputSpec.js │ │ ├── ngBindSpec.js │ │ ├── ngChangeSpec.js │ │ ├── ngClassSpec.js │ │ ├── ngClickSpec.js │ │ ├── ngCloakSpec.js │ │ ├── ngControllerSpec.js │ │ ├── ngEventDirsSpec.js │ │ ├── ngHrefSpec.js │ │ ├── ngIfSpec.js │ │ ├── ngIncludeSpec.js │ │ ├── ngInitSpec.js │ │ ├── ngKeySpec.js │ │ ├── ngListSpec.js │ │ ├── ngModelOptionsSpec.js │ │ ├── ngModelSpec.js │ │ ├── ngNonBindableSpec.js │ │ ├── ngOptionsSpec.js │ │ ├── ngPluralizeSpec.js │ │ ├── ngRefSpec.js │ │ ├── ngRepeatSpec.js │ │ ├── ngShowHideSpec.js │ │ ├── ngSrcSpec.js │ │ ├── ngSrcsetSpec.js │ │ ├── ngStyleSpec.js │ │ ├── ngSwitchSpec.js │ │ ├── scriptSpec.js │ │ ├── selectSpec.js │ │ ├── styleSpec.js │ │ └── validatorsSpec.js │ ├── documentSpec.js │ ├── exceptionHandlerSpec.js │ ├── filter │ │ ├── filterSpec.js │ │ ├── filtersSpec.js │ │ ├── limitToSpec.js │ │ └── orderBySpec.js │ ├── filterSpec.js │ ├── forceReflowSpec.js │ ├── httpBackendSpec.js │ ├── httpSpec.js │ ├── interpolateSpec.js │ ├── intervalSpec.js │ ├── jsonpCallbacksSpec.js │ ├── localeSpec.js │ ├── locationSpec.js │ ├── logSpec.js │ ├── ngOnSpec.js │ ├── ngPropSpec.js │ ├── parseSpec.js │ ├── qSpec.js │ ├── rafSpec.js │ ├── rootElementSpec.js │ ├── rootScopeSpec.js │ ├── sanitizeUriSpec.js │ ├── sceSpecs.js │ ├── snifferSpec.js │ ├── templateRequestSpec.js │ ├── testabilitySpec.js │ ├── timeoutSpec.js │ ├── urlUtilsSpec.js │ └── windowSpec.js ├── ngAnimate │ ├── .eslintrc.json │ ├── animateCacheSpec.js │ ├── animateCssDriverSpec.js │ ├── animateCssSpec.js │ ├── animateJsDriverSpec.js │ ├── animateJsSpec.js │ ├── animateSpec.js │ ├── animationHelperFunctionsSpec.js │ ├── animationSpec.js │ ├── integrationSpec.js │ ├── ngAnimateSwapSpec.js │ └── rafSchedulerSpec.js ├── ngAria │ └── ariaSpec.js ├── ngCookies │ ├── cookieWriterSpec.js │ └── cookiesSpec.js ├── ngMessageFormat │ └── messageFormatSpec.js ├── ngMessages │ └── messagesSpec.js ├── ngMock │ └── angular-mocksSpec.js ├── ngResource │ └── resourceSpec.js ├── ngRoute │ ├── directive │ │ └── ngViewSpec.js │ ├── routeParamsSpec.js │ └── routeSpec.js ├── ngSanitize │ ├── directive │ │ └── ngBindHtmlSpec.js │ ├── filter │ │ └── linkySpec.js │ └── sanitizeSpec.js ├── ngTouch │ ├── directive │ │ └── ngSwipeSpec.js │ └── swipeSpec.js └── stringifySpec.js ├── vendor ├── README.md ├── closure-compiler │ ├── COPYING │ ├── README.md │ └── compiler.jar └── ng-closure-runner │ ├── LICENSE │ ├── README.md │ └── ngcompiler.jar └── yarn.lock /.editorconfig: -------------------------------------------------------------------------------- 1 | # https://editorconfig.org 2 | 3 | root = true 4 | 5 | [*] 6 | charset = utf-8 7 | indent_style = space 8 | indent_size = 2 9 | end_of_line = lf 10 | insert_final_newline = true 11 | trim_trailing_whitespace = true 12 | 13 | [dropdown-toggle.js] 14 | trim_trailing_whitespace = false 15 | insert_final_newline = false 16 | 17 | [htmlparser.js] 18 | insert_final_newline = false 19 | -------------------------------------------------------------------------------- /.eslintignore: -------------------------------------------------------------------------------- 1 | build/** 2 | docs/app/assets/js/angular-bootstrap/** 3 | docs/config/templates/** 4 | node_modules/** 5 | lib/htmlparser/** 6 | src/angular.bind.js 7 | src/ngParseExt/ucd.js 8 | i18n/closure/** 9 | tmp/** 10 | vendor/** 11 | -------------------------------------------------------------------------------- /.eslintrc-browser.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "./.eslintrc-base.json", 3 | 4 | "env": { 5 | // Note: don't set `"browser": true`; code in "src/" should be compatible with 6 | // non-browser environments like Node.js with a custom window implementation 7 | // like jsdom. All browser globals should be taken from window. 8 | "browser": false, 9 | "node": false 10 | }, 11 | 12 | "globals": { 13 | "window": false, 14 | 15 | "angular": false 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /.eslintrc-node.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "./.eslintrc-base.json", 3 | "env": { 4 | "browser": false, 5 | "node": true 6 | }, 7 | "parserOptions": { 8 | "ecmaVersion": 2017 9 | }, 10 | "plugins": [ 11 | "promise" 12 | ] 13 | } 14 | -------------------------------------------------------------------------------- /.eslintrc-todo.json: -------------------------------------------------------------------------------- 1 | { 2 | // This config contains proposed rules that we'd like to have enabled but haven't 3 | // converted the code to adhere yet. If a decision comes to not enable one of these 4 | // rules, it should be removed from the file. Every rule that got enabled in the 5 | // end should be moved from here to a respective section in .eslintrc.json 6 | 7 | "rules": { 8 | // Rules are divided into sections from http://eslint.org/docs/rules/ 9 | 10 | // Best practices 11 | "complexity": ["error", 10], 12 | "dot-notation": "error", 13 | "dot-location": ["error", "property"], 14 | 15 | // Stylistic issues 16 | "block-spacing": ["error", "always"], 17 | "comma-spacing": "error", 18 | "id-denylist": ["error", "event"], 19 | "indent": ["error", 2], 20 | "key-spacing": ["error", { "beforeColon": false, "afterColon": true, "mode": "minimum" }], 21 | "object-curly-spacing": ["error", "never"], 22 | "object-property-newline": ["error", { "allowMultiplePropertiesPerLine": true }], 23 | "operator-linebreak": ["error", "after", { "overrides": { "?": "before", ":": "before" }}] 24 | } 25 | } 26 | -------------------------------------------------------------------------------- /.eslintrc.json: -------------------------------------------------------------------------------- 1 | { 2 | "root": true, 3 | "extends": "./.eslintrc-node.json" 4 | } 5 | -------------------------------------------------------------------------------- /.gitattributes: -------------------------------------------------------------------------------- 1 | # Auto detect text files and perform LF normalization 2 | * text=auto 3 | 4 | # JS files must always use LF for tools to work 5 | *.js eol=lf 6 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | /build/ 2 | /benchpress-build/ 3 | .DS_Store 4 | gen_docs.disable 5 | test.disable 6 | regression/temp*.html 7 | performance/temp*.html 8 | .idea/workspace.xml 9 | *~ 10 | *.swp 11 | angular.js.tmproj 12 | node_modules/ 13 | angular.xcodeproj 14 | .firebase/ 15 | .idea 16 | *.iml 17 | .agignore 18 | .lvimrc 19 | libpeerconnection.log 20 | npm-debug.log 21 | /tmp/ 22 | .vscode 23 | *.log 24 | *.stackdump 25 | scripts/code.angularjs.org-firebase/deploy 26 | scripts/docs.angularjs.org-firebase/deploy 27 | scripts/docs.angularjs.org-firebase/functions/content 28 | -------------------------------------------------------------------------------- /.nvmrc: -------------------------------------------------------------------------------- 1 | 14.16.1 2 | -------------------------------------------------------------------------------- /CODE_OF_CONDUCT.md: -------------------------------------------------------------------------------- 1 | # Contributor Code of Conduct 2 | 3 | The AngularJS project follows the Code of Conduct defined in [the angular/code-of-conduct repository](https://github.com/angular/code-of-conduct/blob/master/CODE_OF_CONDUCT.md). Please read it. 4 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | The MIT License 2 | 3 | Copyright (c) 2010-2020 Google LLC. http://angularjs.org 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in 13 | all copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 21 | THE SOFTWARE. 22 | 23 | -------------------------------------------------------------------------------- /README.closure.md: -------------------------------------------------------------------------------- 1 | Using AngularJS with the Closure Compiler 2 | ========================================= 3 | 4 | The Closure Compiler project contains definitions for the AngularJS JavaScript 5 | in its `contrib/externs` directory. 6 | 7 | The definitions contain externs for use with the Closure compiler (aka 8 | JSCompiler). Passing these files to the --externs parameter of a compiler 9 | pass allows using type annotations for AngularJS objects. For example, 10 | AngularJS's $scope objects can be annotated as: 11 | ```js 12 | /** @type {angular.Scope} */ 13 | var scope = $scope; 14 | ``` 15 | 16 | This allows JSCompiler to type check accesses to scope, give warnings about 17 | missing methods or incorrect arguments, and also prevents renaming of property 18 | accesses with advanced compilation. 19 | 20 | The externs are incomplete and maintained on an as-needed basis, but strive to 21 | be correct. Externs for individual modules should be added in separate files. 22 | 23 | See https://developers.google.com/closure/compiler/ 24 | -------------------------------------------------------------------------------- /SECURITY.md: -------------------------------------------------------------------------------- 1 | # Security Policy 2 | 3 | ## Supported Versions 4 | 5 | **AngularJS support has officially ended as of January 2022.** 6 | [See what ending support means](https://docs.angularjs.org/misc/version-support-status) 7 | and [read the end of life announcement](https://goo.gle/angularjs-end-of-life). 8 | 9 | Visit [angular.io](https://angular.io) for the actively supported Angular. 10 | 11 | | Version | Supported | Status | Comments | 12 | | ----------- | ------------------ | --------------------- | ------------------------------------ | 13 | | 1.8.x | :x: | All support ended | | 14 | | 1.3.x-1.7.x | :x: | All support ended | | 15 | | 1.2.x | :x: | All support ended | Last version to provide IE 8 support | 16 | | <1.2.0 | :x: | All support ended | | 17 | -------------------------------------------------------------------------------- /benchmarks/.eslintrc.json: -------------------------------------------------------------------------------- 1 | { 2 | "root": true, 3 | "extends": "../.eslintrc-browser.json", 4 | 5 | "globals": { 6 | "benchmarkSteps": false, 7 | 8 | // Benchmarks are not run in IE 9 so we're fine. 9 | "console": false 10 | } 11 | } 12 | -------------------------------------------------------------------------------- /benchmarks/README.md: -------------------------------------------------------------------------------- 1 | Instructions for using benchpress (how to create benchmarks, how to run, how to configure) can be 2 | found at: https://github.com/angular/benchpress/blob/master/README.md. 3 | 4 | In this project, there is a configured grunt task for building the benchmarks, 5 | `grunt bp_build`, which places the runnable benchmarks in "/build/benchmarks/". 6 | The existing `grunt webserver` task can be used to serve the built benchmarks at `localhost:8000/build/benchmarks/` 7 | -------------------------------------------------------------------------------- /benchmarks/animation-bp/app.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | 3 | angular 4 | .module('animationBenchmark', ['ngAnimate'], config) 5 | .controller('BenchmarkController', BenchmarkController); 6 | 7 | // Functions - Definitions 8 | function config($compileProvider) { 9 | $compileProvider 10 | .commentDirectivesEnabled(false) 11 | .cssClassDirectivesEnabled(false) 12 | .debugInfoEnabled(false); 13 | } 14 | 15 | function BenchmarkController($scope) { 16 | var self = this; 17 | var itemCount = 1000; 18 | var items = (new Array(itemCount + 1)).join('.').split(''); 19 | 20 | benchmarkSteps.push({ 21 | name: 'create', 22 | fn: function() { 23 | $scope.$apply(function() { 24 | self.items = items; 25 | }); 26 | } 27 | }); 28 | 29 | benchmarkSteps.push({ 30 | name: '$digest', 31 | fn: function() { 32 | $scope.$root.$digest(); 33 | } 34 | }); 35 | 36 | benchmarkSteps.push({ 37 | name: 'destroy', 38 | fn: function() { 39 | $scope.$apply(function() { 40 | self.items = []; 41 | }); 42 | } 43 | }); 44 | } 45 | -------------------------------------------------------------------------------- /benchmarks/animation-bp/bp.conf.js: -------------------------------------------------------------------------------- 1 | /* eslint-env node */ 2 | 3 | 'use strict'; 4 | 5 | module.exports = function(config) { 6 | config.set({ 7 | scripts: [ 8 | { 9 | id: 'jquery', 10 | src: 'jquery-noop.js' 11 | }, { 12 | id: 'angular', 13 | src: '/build/angular.js' 14 | }, { 15 | id: 'angular-animate', 16 | src: '/build/angular-animate.js' 17 | }, { 18 | src: 'app.js' 19 | } 20 | ] 21 | }); 22 | }; 23 | -------------------------------------------------------------------------------- /benchmarks/animation-bp/jquery-noop.js: -------------------------------------------------------------------------------- 1 | // Override me with ?jquery=/node_modules/jquery/dist/jquery.js 2 | -------------------------------------------------------------------------------- /benchmarks/animation-bp/main.html: -------------------------------------------------------------------------------- 1 | 18 |
19 |
20 |

Large collection of elements animated in and out with ngAnimate

21 | 22 |
23 |
24 | Just a plain ol' element 25 |
26 |
27 |
28 |
29 | -------------------------------------------------------------------------------- /benchmarks/bootstrap-compile-bp/bp.conf.js: -------------------------------------------------------------------------------- 1 | /* eslint-env node */ 2 | 3 | 'use strict'; 4 | 5 | module.exports = function(config) { 6 | config.set({ 7 | scripts: [{ 8 | id: 'angular', 9 | src: '/build/angular.js' 10 | }, 11 | { 12 | src: 'app.js' 13 | }] 14 | }); 15 | }; 16 | -------------------------------------------------------------------------------- /benchmarks/event-delegation-bp/bp.conf.js: -------------------------------------------------------------------------------- 1 | /* eslint-env node */ 2 | 3 | 'use strict'; 4 | 5 | module.exports = function(config) { 6 | config.set({ 7 | scripts: [{ 8 | id: 'angular', 9 | src: '/build/angular.js' 10 | }, { 11 | src: 'app.js' 12 | }] 13 | }); 14 | }; 15 | -------------------------------------------------------------------------------- /benchmarks/largetable-bp/bp.conf.js: -------------------------------------------------------------------------------- 1 | /* eslint-env node */ 2 | 3 | 'use strict'; 4 | 5 | module.exports = function(config) { 6 | config.set({ 7 | scripts: [{ 8 | id: 'jquery', 9 | src: 'jquery-noop.js' 10 | }, 11 | { 12 | id: 'angular', 13 | src: '/build/angular.js' 14 | }, 15 | { 16 | src: 'app.js' 17 | }] 18 | }); 19 | }; 20 | -------------------------------------------------------------------------------- /benchmarks/largetable-bp/jquery-noop.js: -------------------------------------------------------------------------------- 1 | // Override me with ?jquery=/node_modules/jquery/dist/jquery.js 2 | -------------------------------------------------------------------------------- /benchmarks/ng-class-bp/bp.conf.js: -------------------------------------------------------------------------------- 1 | /* eslint-env node */ 2 | 3 | 'use strict'; 4 | 5 | module.exports = function(config) { 6 | config.set({ 7 | scripts: [{ 8 | id: 'angular', 9 | src: '/build/angular.js' 10 | }, 11 | { 12 | src: 'app.js' 13 | }] 14 | }); 15 | }; 16 | -------------------------------------------------------------------------------- /benchmarks/ng-options-bp/bp.conf.js: -------------------------------------------------------------------------------- 1 | /* eslint-env node */ 2 | 3 | 'use strict'; 4 | 5 | module.exports = function(config) { 6 | config.set({ 7 | scripts: [{ 8 | id: 'angular', 9 | src: '/build/angular.js' 10 | }, 11 | { 12 | src: 'app.js' 13 | }] 14 | }); 15 | }; 16 | -------------------------------------------------------------------------------- /benchmarks/ng-options-bp/main.html: -------------------------------------------------------------------------------- 1 |
2 |
3 |
4 |

5 | Tests the execution of ng-options for rendering during model and option updates. 6 |

7 | 8 |
9 |
10 |
11 | -------------------------------------------------------------------------------- /benchmarks/orderby-bp/bp.conf.js: -------------------------------------------------------------------------------- 1 | /* eslint-env node */ 2 | 3 | 'use strict'; 4 | 5 | module.exports = function(config) { 6 | config.set({ 7 | scripts: [ 8 | { 9 | 'id': 'jquery', 10 | 'src': 'jquery-noop.js' 11 | }, { 12 | id: 'angular', 13 | src: '/build/angular.js' 14 | }, { 15 | src: 'app.js' 16 | }] 17 | }); 18 | }; 19 | -------------------------------------------------------------------------------- /benchmarks/orderby-bp/jquery-noop.js: -------------------------------------------------------------------------------- 1 | // Override me with ?jquery=/node_modules/jquery/dist/jquery.js 2 | -------------------------------------------------------------------------------- /benchmarks/parsed-expressions-bp/bp.conf.js: -------------------------------------------------------------------------------- 1 | /* eslint-env node */ 2 | 3 | 'use strict'; 4 | 5 | module.exports = function(config) { 6 | config.set({ 7 | scripts: [{ 8 | id: 'angular', 9 | src: '/build/angular.js' 10 | }, 11 | { 12 | src: 'app.js' 13 | }] 14 | }); 15 | }; 16 | -------------------------------------------------------------------------------- /benchmarks/repeat-animate-bp/app-classfilter.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | 3 | angular.module('repeatAnimateBenchmark', ['ngAnimate']) 4 | .config(function($animateProvider) { 5 | $animateProvider.classNameFilter(/animate-/); 6 | }) 7 | .run(function($rootScope) { 8 | $rootScope.fileType = 'classfilter'; 9 | }); 10 | -------------------------------------------------------------------------------- /benchmarks/repeat-animate-bp/app-noanimate.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | 3 | angular.module('repeatAnimateBenchmark', []) 4 | .run(function($rootScope) { 5 | $rootScope.fileType = 'noanimate'; 6 | }); 7 | -------------------------------------------------------------------------------- /benchmarks/repeat-animate-bp/app.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | 3 | angular.module('repeatAnimateBenchmark', ['ngAnimate']) 4 | .run(function($rootScope) { 5 | $rootScope.fileType = 'default'; 6 | }); 7 | 8 | -------------------------------------------------------------------------------- /benchmarks/repeat-animate-bp/bp.conf.js: -------------------------------------------------------------------------------- 1 | /* eslint-env node */ 2 | 3 | 'use strict'; 4 | 5 | module.exports = function(config) { 6 | config.set({ 7 | scripts: [ 8 | { 9 | id: 'angular', 10 | src: '/build/angular.js' 11 | }, 12 | { 13 | id: 'angular-animate', 14 | src: '/build/angular-animate.js' 15 | }, 16 | { 17 | id: 'app', 18 | src: 'app.js' 19 | }, 20 | { 21 | src: 'common.js' 22 | }] 23 | }); 24 | }; 25 | -------------------------------------------------------------------------------- /benchmarks/select-ng-value-bp/bp.conf.js: -------------------------------------------------------------------------------- 1 | /* eslint-env node */ 2 | 3 | 'use strict'; 4 | 5 | module.exports = function(config) { 6 | config.set({ 7 | scripts: [{ 8 | id: 'angular', 9 | src: '/build/angular.js' 10 | }, 11 | { 12 | src: 'app.js' 13 | }] 14 | }); 15 | }; 16 | -------------------------------------------------------------------------------- /benchmarks/select-ng-value-bp/main.html: -------------------------------------------------------------------------------- 1 |
2 |
3 |
4 |

5 | Tests the execution of a select with ngRepeat'ed options with ngValue for rendering during model 6 | and option updates. 7 |

8 | 13 |
14 |
15 |
16 | -------------------------------------------------------------------------------- /css/angular.css: -------------------------------------------------------------------------------- 1 | @charset "UTF-8"; 2 | 3 | [ng\:cloak], 4 | [ng-cloak], 5 | [data-ng-cloak], 6 | [x-ng-cloak], 7 | .ng-cloak, 8 | .x-ng-cloak, 9 | .ng-hide:not(.ng-hide-animate) { 10 | display: none !important; 11 | } 12 | 13 | ng\:form { 14 | display: block; 15 | } 16 | 17 | .ng-animate-shim { 18 | visibility:hidden; 19 | } 20 | 21 | .ng-anchor { 22 | position:absolute; 23 | } 24 | -------------------------------------------------------------------------------- /docs/app/assets/Error404.html: -------------------------------------------------------------------------------- 1 |

Oops!

2 | 3 |

The page you requested does not exist. Perhaps you were looking for something else...

4 | 5 |
6 | 7 |
8 |
{{ key }}
9 |
{{ item.name }}
10 |
11 |
12 | -------------------------------------------------------------------------------- /docs/app/assets/css/animations.css: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/angular/angular.js/d8f77817eb5c98dec5317bc3756d1ea1812bcfbe/docs/app/assets/css/animations.css -------------------------------------------------------------------------------- /docs/app/assets/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/angular/angular.js/d8f77817eb5c98dec5317bc3756d1ea1812bcfbe/docs/app/assets/favicon.ico -------------------------------------------------------------------------------- /docs/app/assets/img/AngularJS-small.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/angular/angular.js/d8f77817eb5c98dec5317bc3756d1ea1812bcfbe/docs/app/assets/img/AngularJS-small.png -------------------------------------------------------------------------------- /docs/app/assets/img/bullet.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/angular/angular.js/d8f77817eb5c98dec5317bc3756d1ea1812bcfbe/docs/app/assets/img/bullet.png -------------------------------------------------------------------------------- /docs/app/assets/img/glyphicons-halflings-white.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/angular/angular.js/d8f77817eb5c98dec5317bc3756d1ea1812bcfbe/docs/app/assets/img/glyphicons-halflings-white.png -------------------------------------------------------------------------------- /docs/app/assets/img/glyphicons-halflings.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/angular/angular.js/d8f77817eb5c98dec5317bc3756d1ea1812bcfbe/docs/app/assets/img/glyphicons-halflings.png -------------------------------------------------------------------------------- /docs/app/assets/robots.txt: -------------------------------------------------------------------------------- 1 | User-agent: * 2 | 3 | # The map files are not required by the app 4 | Disallow: /*.map$ -------------------------------------------------------------------------------- /docs/app/e2e/.eslintrc.json: -------------------------------------------------------------------------------- 1 | { 2 | "root": true, 3 | "extends": "../../../.eslintrc-node.json", 4 | 5 | 6 | "env": { 7 | "jasmine": true, 8 | "protractor": true 9 | }, 10 | 11 | "globals": { 12 | "angular": false, 13 | /* testabilityPatch / matchers */ 14 | "inject": false, 15 | "module": false, 16 | "dealoc": false, 17 | "_jQuery": false, 18 | "_jqLiteMode": false, 19 | "sortedHtml": false, 20 | "childrenTagsOf": false, 21 | "assertHidden": false, 22 | "assertVisible": false, 23 | "provideLog": false, 24 | "spyOnlyCallsWithArgs": false, 25 | "createMockStyleSheet": false, 26 | "browserTrigger": false, 27 | "jqLiteCacheSize": false 28 | } 29 | } 30 | -------------------------------------------------------------------------------- /docs/app/e2e/api-docs/provider-pages.scenario.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | 3 | describe('provider pages', function() { 4 | 5 | it('should show the related service', function() { 6 | browser.get('build/docs/index.html#!/api/ng/provider/$compileProvider'); 7 | var serviceLink = element.all(by.css('ol.api-profile-header-structure li a')).first(); 8 | expect(serviceLink.getText()).toEqual('- $compile'); 9 | expect(serviceLink.getAttribute('href')).toMatch(/api\/ng\/service\/\$compile/); 10 | }); 11 | 12 | }); 13 | -------------------------------------------------------------------------------- /docs/app/e2e/api-docs/service-pages.scenario.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | 3 | describe('service pages', function() { 4 | 5 | it('should show the related provider if there is one', function() { 6 | browser.get('build/docs/index.html#!/api/ng/service/$compile'); 7 | var providerLink = element.all(by.css('ol.api-profile-header-structure li a')).first(); 8 | expect(providerLink.getText()).toEqual('- $compileProvider'); 9 | expect(providerLink.getAttribute('href')).toMatch(/api\/ng\/provider\/\$compileProvider/); 10 | 11 | browser.get('build/docs/index.html#!/api/ng/service/$q'); 12 | providerLink = element.all(by.css('ol.api-profile-header-structure li a')).first(); 13 | expect(providerLink.getText()).not.toEqual('- $compileProvider'); 14 | expect(providerLink.getAttribute('href')).not.toMatch(/api\/ng\/provider\/\$compileProvider/); 15 | }); 16 | 17 | it('should show parameter defaults', function() { 18 | browser.get('build/docs/index.html#!/api/ng/service/$timeout'); 19 | expect(element.all(by.css('.input-arguments p em')).first().getText()).toContain('(default: 0)'); 20 | }); 21 | 22 | }); 23 | -------------------------------------------------------------------------------- /docs/app/src/.eslintrc.json: -------------------------------------------------------------------------------- 1 | { 2 | "root": true, 3 | "extends": "../../../.eslintrc-browser.json", 4 | 5 | "globals": { 6 | "lunr": false 7 | } 8 | } 9 | -------------------------------------------------------------------------------- /docs/app/src/app.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | 3 | angular.module('docsApp', [ 4 | 'ngRoute', 5 | 'ngCookies', 6 | 'ngSanitize', 7 | 'ngAnimate', 8 | 'DocsController', 9 | 'pagesData', 10 | 'navData', 11 | 'directives', 12 | 'errors', 13 | 'examples', 14 | 'search', 15 | 'tutorials', 16 | 'versions', 17 | 'ui.bootstrap.dropdown' 18 | ]) 19 | 20 | .config(['$locationProvider', function($locationProvider) { 21 | $locationProvider.html5Mode(true).hashPrefix('!'); 22 | }]); 23 | -------------------------------------------------------------------------------- /docs/app/test/.eslintrc.json: -------------------------------------------------------------------------------- 1 | { 2 | "root": true, 3 | "extends": "../../../.eslintrc-browser.json", 4 | 5 | "env": { 6 | "jasmine": true 7 | }, 8 | 9 | "rules": { 10 | // Some rules are not that important in tests and conflict with 11 | // Jasmine or would make it easier to write some tests; we disable 12 | // those ones here. 13 | "no-invalid-this": "off", 14 | "no-throw-literal": "off", 15 | "no-unused-vars": "off" 16 | }, 17 | 18 | "globals": { 19 | // ngMocks 20 | "module": false, 21 | "inject": true 22 | } 23 | } 24 | -------------------------------------------------------------------------------- /docs/config/inline-tag-defs/type.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | 3 | // eslint-disable-next-line new-cap 4 | var encoder = new require('node-html-encoder').Encoder(); 5 | 6 | /** 7 | * @dgService typeInlineTagDef 8 | * @description 9 | * Replace with markup that displays a nice type 10 | */ 11 | module.exports = function typeInlineTagDef(getTypeClass) { 12 | return { 13 | name: 'type', 14 | handler: function(doc, tagName, tagDescription) { 15 | return '' + encoder.htmlEncode(tagDescription) + ''; 16 | } 17 | }; 18 | }; 19 | -------------------------------------------------------------------------------- /docs/config/processors/sitemap.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | 3 | var exclusionRegex = /^index|examples\/|ptore2e\//; 4 | 5 | module.exports = function createSitemap() { 6 | return { 7 | $runAfter: ['paths-computed'], 8 | $runBefore: ['rendering-docs'], 9 | $process: function(docs) { 10 | docs.push({ 11 | id: 'sitemap.xml', 12 | path: 'sitemap.xml', 13 | outputPath: '../sitemap.xml', 14 | template: 'sitemap.template.xml', 15 | urls: docs.filter(function(doc) { 16 | return doc.path && 17 | doc.outputPath && 18 | !exclusionRegex.test(doc.outputPath); 19 | }).map(function(doc) { 20 | return doc.path; 21 | }) 22 | }); 23 | } 24 | }; 25 | }; 26 | -------------------------------------------------------------------------------- /docs/config/services/errorNamespaceMap.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | var StringMap = require('stringmap'); 3 | 4 | /** 5 | * @dgService errorNamespaceMap 6 | * A map of error namespaces by name. 7 | */ 8 | module.exports = function errorNamespaceMap() { 9 | return new StringMap(); 10 | }; 11 | -------------------------------------------------------------------------------- /docs/config/services/getMinerrInfo.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | 3 | var path = require('canonical-path'); 4 | 5 | /** 6 | * @dgService minErrInfo 7 | * @description 8 | * Load the error information that was generated during the AngularJS build. 9 | */ 10 | module.exports = function getMinerrInfo(readFilesProcessor) { 11 | return function() { 12 | var minerrInfoPath = path.resolve(readFilesProcessor.basePath, 'build/errors.json'); 13 | return require(minerrInfoPath); 14 | }; 15 | }; 16 | -------------------------------------------------------------------------------- /docs/config/services/getVersion.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | var path = require('canonical-path'); 3 | 4 | /** 5 | * dgService getVersion 6 | * @description 7 | * Find the current version of the node module 8 | */ 9 | module.exports = function getVersion(readFilesProcessor) { 10 | var sourceFolder = path.resolve(readFilesProcessor.basePath, 'node_modules'); 11 | var packageFile = 'package.json'; 12 | 13 | return function(component) { 14 | return require(path.join(sourceFolder, component, packageFile)).version; 15 | }; 16 | }; 17 | -------------------------------------------------------------------------------- /docs/config/tag-defs/installation.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | 3 | module.exports = { 4 | name: 'installation' 5 | }; 6 | -------------------------------------------------------------------------------- /docs/config/tag-defs/sortOrder.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | 3 | module.exports = { 4 | name: 'sortOrder', 5 | transforms: function(doc, tag, value) { 6 | return parseInt(value, 10); 7 | } 8 | }; 9 | -------------------------------------------------------------------------------- /docs/config/tag-defs/this.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | 3 | module.exports = { 4 | name: 'this' 5 | }; 6 | -------------------------------------------------------------------------------- /docs/config/tag-defs/tutorial-step.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | 3 | module.exports = { 4 | name: 'step', 5 | transforms: function(doc, tag, value) { 6 | if (doc.docType !== 'tutorial') { 7 | throw new Error('Invalid tag, step. You should only use this tag on tutorial docs'); 8 | } 9 | return parseInt(value,10); 10 | } 11 | }; 12 | -------------------------------------------------------------------------------- /docs/config/templates/app/angular-service.template.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | 3 | angular.module('{$ doc.ngModuleName $}', []) 4 | .value('{$ doc.serviceName $}', {$ doc.serviceValue | json $}); 5 | -------------------------------------------------------------------------------- /docs/config/templates/app/error.template.html: -------------------------------------------------------------------------------- 1 | {% extends "base.template.html" %} 2 | 3 | {% block content %} 4 |

Error: {$ doc.namespace $}:{$ doc.name $} 5 |
{$ doc.fullName $}
6 |

7 | 8 |
9 |
{$ doc.formattedErrorMessage $}
10 |
11 | 12 |

Description

13 |
14 | {$ doc.description | marked $} 15 |
16 | 17 | {% endblock %} 18 | -------------------------------------------------------------------------------- /docs/config/templates/app/errorNamespace.template.html: -------------------------------------------------------------------------------- 1 | {% extends 'base.template.html' %} 2 | 3 | {% block content %} 4 |

{$ doc.name $}

5 | 6 |
7 | Here are the list of errors in the {$ doc.name $} namespace. 8 | 9 |
10 | 11 |
12 |
13 | 14 | 15 | 16 | 17 | 18 | {% for errorDoc in doc.errors -%} 19 | 20 | 21 | 22 | 23 | {% endfor %} 24 |
NameDescription
{$ errorDoc.name $}{$ errorDoc.fullName $}
25 |
26 |
27 | 28 | {% endblock %} 29 | -------------------------------------------------------------------------------- /docs/config/templates/app/json-doc.template.json: -------------------------------------------------------------------------------- 1 | {$ doc.data | json $} -------------------------------------------------------------------------------- /docs/config/templates/app/nav-data.template.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | 3 | // Meta data used by the AngularJS docs app 4 | angular.module('navData', []) 5 | .value('NG_NAVIGATION', {$ doc.areas | json $}); 6 | -------------------------------------------------------------------------------- /docs/config/templates/app/pages-data.template.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | 3 | // Meta data used by the AngularJS docs app 4 | angular.module('pagesData', []) 5 | .value('NG_PAGES', {$ doc.pages | json $}); 6 | -------------------------------------------------------------------------------- /docs/config/templates/app/sitemap.template.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | {%- for url in doc.urls %} 4 | 5 | https://docs.angularjs.org/{$ url $} 6 | {% endfor %} 7 | -------------------------------------------------------------------------------- /docs/config/templates/app/tutorial.template.html: -------------------------------------------------------------------------------- 1 | {% include 'overview.template.html' %} 2 | -------------------------------------------------------------------------------- /docs/config/templates/examples/index.template.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | Example - {$ doc.id $} 6 | {% for stylesheet in doc.stylesheets %} 7 | {% endfor %} 8 | 9 | {% for script in doc.scripts %} 10 | {% endfor %} 11 | 12 | {% if doc.example.fixBase -%} 13 | 16 | {%- endif %} 17 | 18 | 19 | {$ doc.fileContents $} 20 | 21 | -------------------------------------------------------------------------------- /docs/config/templates/examples/manifest.template.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "{$ doc.example.id $}", 3 | "files": [ 4 | "index-production.html" 5 | {%- for file in doc.files %}, 6 | "{$ file $}"{% endfor %} 7 | ] 8 | } -------------------------------------------------------------------------------- /docs/config/templates/examples/protractorTests.template.js: -------------------------------------------------------------------------------- 1 | describe("{$ doc.description $}", function() { 2 | var rootEl; 3 | beforeEach(function() { 4 | rootEl = browser.rootEl;{% if doc['ng-app-included'] %} 5 | browser.rootEl = '[ng-app]';{% endif %} 6 | browser.get("{$ doc.basePath $}{$ doc.example.deployments[doc.deployment.name].outputPath $}"); 7 | }); 8 | {% if doc['ng-app-included'] %}afterEach(function() { browser.rootEl = rootEl; });{% endif %} 9 | {$ doc.innerTest $} 10 | }); -------------------------------------------------------------------------------- /docs/config/templates/examples/template.css: -------------------------------------------------------------------------------- 1 | {$ doc.fileContents $} -------------------------------------------------------------------------------- /docs/config/templates/examples/template.html: -------------------------------------------------------------------------------- 1 | {$ doc.fileContents $} -------------------------------------------------------------------------------- /docs/config/templates/examples/template.js: -------------------------------------------------------------------------------- 1 | (function(angular) { 2 | 'use strict'; 3 | {$ doc.fileContents $} 4 | })(window.angular); -------------------------------------------------------------------------------- /docs/config/templates/examples/template.json: -------------------------------------------------------------------------------- 1 | {$ doc.fileContents $} -------------------------------------------------------------------------------- /docs/config/templates/examples/template.protractor: -------------------------------------------------------------------------------- 1 | {$ doc.fileContents $} -------------------------------------------------------------------------------- /docs/config/templates/examples/template.scenario: -------------------------------------------------------------------------------- 1 | {$ doc.fileContents $} -------------------------------------------------------------------------------- /docs/config/templates/examples/template.spec: -------------------------------------------------------------------------------- 1 | {$ doc.fileContents $} -------------------------------------------------------------------------------- /docs/config/templates/ngdoc/api/componentGroup.template.html: -------------------------------------------------------------------------------- 1 | {% block content %} 2 |

3 | {%- if doc.title -%} 4 | {$ doc.title $} 5 | {%- elif doc.moduleName -%} 6 | {$ doc.groupType | title $} components in {$ doc.moduleName | code $} 7 | {%- else -%} 8 | Pages 9 | {%- endif -%} 10 |

11 | 12 | {$ doc.description | marked $} 13 | 14 |
15 |
16 | 17 | 18 | 19 | 20 | 21 | {% for page in doc.components %} 22 | 23 | 24 | 25 | 26 | {% endfor %} 27 |
NameDescription
{$ page.id | link(page.name, page) $}{$ page.description | firstParagraph | marked $}
28 |
29 |
30 | 31 | {% endblock %} -------------------------------------------------------------------------------- /docs/config/templates/ngdoc/api/filter.template.html: -------------------------------------------------------------------------------- 1 | {% import "lib/macros.html" as lib -%} 2 | {% extends "api/api.template.html" %} 3 | 4 | {% block additional %} 5 |

Usage

6 |

In HTML Template Binding

7 | {% if doc.usage %} 8 | {$ doc.usage | code $} 9 | {% else %} 10 | {% code -%} 11 | {{ {$ doc.name $}_expression | {$ doc.name $} 12 | {%- for param in doc.params %}{% if not loop.first %} : {$ param.name $}{% endif %}{% endfor -%} 13 | }} 14 | {%- endcode %} 15 | {% endif %} 16 | 17 |

In JavaScript

18 | {% code -%} 19 | {%- set sep = joiner(', ') -%} 20 | $filter('{$ doc.name $}')({% for param in doc.params %}{$ sep() $}{$ param.name $}{% endfor -%}) 21 | {%- endcode %} 22 | 23 | {% include "lib/params.template.html" %} 24 | {% include "lib/this.template.html" %} 25 | {% include "lib/returns.template.html" %} 26 | {% endblock %} 27 | -------------------------------------------------------------------------------- /docs/config/templates/ngdoc/api/function.template.html: -------------------------------------------------------------------------------- 1 | {% extends "api/object.template.html" %} 2 | -------------------------------------------------------------------------------- /docs/config/templates/ngdoc/api/input.template.html: -------------------------------------------------------------------------------- 1 | {% import "lib/macros.html" as lib -%} 2 | {% extends "api/directive.template.html" %} 3 | 4 | {% block usage %} 5 |

Usage

6 | {% code %} 7 | 11 | {% endcode %} 12 | {% endblock %} -------------------------------------------------------------------------------- /docs/config/templates/ngdoc/api/object.template.html: -------------------------------------------------------------------------------- 1 | {% import "lib/macros.html" as lib %} 2 | {% extends "api/api.template.html" %} 3 | 4 | {% block additional %} 5 | 6 | {% if doc.params or doc.returns or doc.this or doc.kind == 'function' -%} 7 |

Usage

8 | {% if doc.usage %} 9 | {$ doc.usage | code $} 10 | {% else %} 11 | {$ lib.functionSyntax(doc) $} 12 | {% endif %} 13 | 14 | {% include "lib/params.template.html" %} 15 | {% include "lib/this.template.html" %} 16 | {% include "lib/returns.template.html" %} 17 | {%- endif %} 18 | 19 | {% include "lib/methods.template.html" %} 20 | {% include "lib/events.template.html" %} 21 | {% include "lib/properties.template.html" %} 22 | 23 | {% endblock %} 24 | -------------------------------------------------------------------------------- /docs/config/templates/ngdoc/api/provider.template.html: -------------------------------------------------------------------------------- 1 | {% extends "api/object.template.html" %} 2 | 3 | {% block related_components %} 4 | {% if doc.serviceDoc -%} 5 |
  • 6 | - {$ doc.serviceDoc.name $} 7 |
  • 8 | {%- endif %} 9 | {% endblock %} 10 | -------------------------------------------------------------------------------- /docs/config/templates/ngdoc/api/service.template.html: -------------------------------------------------------------------------------- 1 | {% extends "api/object.template.html" %} 2 | 3 | {% block related_components %} 4 | {% if doc.providerDoc -%} 5 |
  • 6 | - {$ doc.providerDoc.name $} 7 |
  • 8 | {%- endif %} 9 | {% endblock %} 10 | -------------------------------------------------------------------------------- /docs/config/templates/ngdoc/api/type.template.html: -------------------------------------------------------------------------------- 1 | {% extends "api/object.template.html" %} 2 | -------------------------------------------------------------------------------- /docs/config/templates/ngdoc/base.template.html: -------------------------------------------------------------------------------- 1 |  Improve this Doc 2 | 3 | {% block content %} 4 | {% endblock %} 5 | -------------------------------------------------------------------------------- /docs/config/templates/ngdoc/lib/deprecated.html: -------------------------------------------------------------------------------- 1 | {% macro deprecatedBlock(doc) %}{% if doc.deprecated %} 2 |
    3 |
    Deprecated: 4 | {% if doc.deprecated.sinceVersion %}(since {$ doc.deprecated.sinceVersion $}) {% endif %} 5 | {% if doc.deprecated.removeVersion %}(to be removed in {$ doc.deprecated.removeVersion $}) {% endif %} 6 |
    7 | {$ doc.deprecated.description | marked $} 8 |
    9 | {% endif %}{% endmacro %} -------------------------------------------------------------------------------- /docs/config/templates/ngdoc/lib/events.template.html: -------------------------------------------------------------------------------- 1 | {% import "lib/macros.html" as lib -%} 2 | {% import "lib/deprecated.html" as x -%} 3 | 4 | {%- if doc.events %} 5 |

    Events

    6 | 37 | {% endif -%} 38 | -------------------------------------------------------------------------------- /docs/config/templates/ngdoc/lib/params.template.html: -------------------------------------------------------------------------------- 1 | {% import "lib/macros.html" as lib -%} 2 | {%- if doc.params %} 3 |
    4 |

    Arguments

    5 | {$ lib.paramTable(doc.params) $} 6 |
    7 | {%- endif -%} 8 | -------------------------------------------------------------------------------- /docs/config/templates/ngdoc/lib/properties.template.html: -------------------------------------------------------------------------------- 1 | {% import "lib/macros.html" as lib -%} 2 | {% import "lib/deprecated.html" as x -%} 3 | 4 | {%- if doc.properties %} 5 |

    Properties

    6 | 15 | {%- endif -%} 16 | -------------------------------------------------------------------------------- /docs/config/templates/ngdoc/lib/returns.template.html: -------------------------------------------------------------------------------- 1 | {% import "lib/macros.html" as lib -%} 2 | {% if doc.returns -%} 3 |

    Returns

    4 | {$ lib.typeInfo(doc.returns) $} 5 | {%- endif %} -------------------------------------------------------------------------------- /docs/config/templates/ngdoc/lib/this.template.html: -------------------------------------------------------------------------------- 1 | {% if doc.this %} 2 |

    Method's `this`

    3 | {$ doc.this | marked $} 4 | {% endif %} 5 | -------------------------------------------------------------------------------- /docs/config/templates/ngdoc/overview.template.html: -------------------------------------------------------------------------------- 1 | {% extends "base.template.html" %} 2 | 3 | {% block content %} 4 | {$ doc.description | marked $} 5 | {% endblock %} -------------------------------------------------------------------------------- /docs/content/error/$animate/nongcls.ngdoc: -------------------------------------------------------------------------------- 1 | @ngdoc error 2 | @name $animate:nongcls 3 | @fullName `ng-animate` class not allowed 4 | @description 5 | 6 | This error occurs, when trying to set `$animateProvider.classNameFilter()` to a RegExp containing 7 | the reserved `ng-animate` class. Since `.ng-animate` will be added/removed by `$animate` itself, 8 | using it as part of the `classNameFilter` RegExp is not allowed. 9 | -------------------------------------------------------------------------------- /docs/content/error/$animate/notcsel.ngdoc: -------------------------------------------------------------------------------- 1 | @ngdoc error 2 | @name $animate:notcsel 3 | @fullName Not class CSS selector 4 | @description 5 | 6 | Expecting a CSS selector for class. Class selectors must start with `.`, for example: `.my-class-name`. 7 | -------------------------------------------------------------------------------- /docs/content/error/$cacheFactory/iid.ngdoc: -------------------------------------------------------------------------------- 1 | @ngdoc error 2 | @name $cacheFactory:iid 3 | @fullName Invalid ID 4 | @description 5 | 6 | This error occurs when trying to create a new `cache` object via {@link ng.$cacheFactory} with an ID that was already used to create another cache object. 7 | 8 | To resolve the error please use a different cache ID when calling `$cacheFactory`. 9 | -------------------------------------------------------------------------------- /docs/content/error/$compile/baddir.ngdoc: -------------------------------------------------------------------------------- 1 | @ngdoc error 2 | @name $compile:baddir 3 | @fullName Invalid Directive/Component Name 4 | @description 5 | 6 | This error occurs when the name of a directive or component is not valid. 7 | 8 | Directives and Components must start with a lowercase character and must not contain leading or trailing whitespaces. 9 | -------------------------------------------------------------------------------- /docs/content/error/$compile/badrestrict.ngdoc: -------------------------------------------------------------------------------- 1 | @ngdoc error 2 | @name $compile:badrestrict 3 | @fullName Invalid Directive Restrict 4 | @description 5 | 6 | This error occurs when the restrict property of a directive is not valid. 7 | 8 | The directive restrict property must be a string including one or more of the following characters: 9 | * E (element) 10 | * A (attribute) 11 | * C (class) 12 | * M (comment) 13 | 14 | For example: 15 | ```javascript 16 | restrict: 'E' 17 | restrict: 'EAC' 18 | ``` 19 | -------------------------------------------------------------------------------- /docs/content/error/$compile/ctxoverride.ngdoc: -------------------------------------------------------------------------------- 1 | @ngdoc error 2 | @name $compile:ctxoverride 3 | @fullName DOM Property Security Context Override 4 | @description 5 | 6 | This error occurs when the security context for a property is defined via {@link ng.$compileProvider#addPropertySecurityContext addPropertySecurityContext()} multiple times under different security contexts. 7 | 8 | For example: 9 | 10 | ```js 11 | $compileProvider.addPropertySecurityContext("my-element", "src", $sce.MEDIA_URL); 12 | $compileProvider.addPropertySecurityContext("my-element", "src", $sce.RESOURCE_URL); //throws 13 | ``` 14 | -------------------------------------------------------------------------------- /docs/content/error/$compile/infchng.ngdoc: -------------------------------------------------------------------------------- 1 | @ngdoc error 2 | @name $compile:infchng 3 | @fullName Unstable `$onChanges` hooks 4 | @description 5 | 6 | This error occurs when the application's model becomes unstable because some `$onChanges` hooks are causing updates which then trigger 7 | further calls to `$onChanges` that can never complete. 8 | AngularJS detects this situation and prevents an infinite loop from causing the browser to become unresponsive. 9 | 10 | For example, the situation can occur by setting up a `$onChanges()` hook which triggers an event on the component, which subsequently 11 | triggers the component's bound inputs to be updated: 12 | 13 | ```html 14 | 15 | ``` 16 | 17 | ```js 18 | function Controller1() {} 19 | Controller1.$onChanges = function() { 20 | this.onChange(); 21 | }; 22 | 23 | mod.component('c1', { 24 | controller: Controller1, 25 | bindings: {'prop': '<', onChange: '&'} 26 | } 27 | ``` 28 | 29 | The maximum number of allowed iterations of the `$onChanges` hooks is controlled via TTL setting which can be configured via 30 | {@link ng.$compileProvider#onChangesTtl `$compileProvider.onChangesTtl`}. 31 | -------------------------------------------------------------------------------- /docs/content/error/$compile/iscp.ngdoc: -------------------------------------------------------------------------------- 1 | @ngdoc error 2 | @name $compile:iscp 3 | @fullName Invalid Isolate Scope Definition 4 | @description 5 | 6 | When declaring isolate scope the scope definition object must be in specific format which starts with mode character (`@&=<`), after which comes an optional `?`, and it ends with an optional local name. 7 | 8 | ``` 9 | myModule.directive('directiveName', function factory() { 10 | return { 11 | ... 12 | scope: { 13 | 'localName': '@', // OK 14 | 'localName2': '&attr', // OK 15 | 'localName3': ' 35 | ``` 36 | 37 | -------------------------------------------------------------------------------- /docs/content/error/$compile/multidir.ngdoc: -------------------------------------------------------------------------------- 1 | @ngdoc error 2 | @name $compile:multidir 3 | @fullName Multiple Directive Resource Contention 4 | @description 5 | 6 | This error occurs when multiple directives are applied to the same DOM element, and 7 | processing them would result in a collision or an unsupported configuration. 8 | 9 | 10 | To resolve this issue remove one of the directives which is causing the collision. 11 | 12 | Example scenarios of multiple incompatible directives applied to the same element include: 13 | 14 | * Multiple directives requesting `isolated scope`. 15 | * Multiple directives publishing a controller under the same name. 16 | * Multiple directives declared with the `transclusion` option. 17 | * Multiple directives attempting to define a `template` or `templateURL`. 18 | -------------------------------------------------------------------------------- /docs/content/error/$compile/multilink.ngdoc: -------------------------------------------------------------------------------- 1 | @ngdoc error 2 | @name $compile:multilink 3 | @fullName Linking Element Multiple Times 4 | @description 5 | 6 | This error occurs when a single element is linked more then once. 7 | 8 | For example, if an element is compiled and linked twice without cloning: 9 | ``` 10 | var linker = $compile(template); 11 | linker($scope); //=> ok 12 | linker($scope); //=> multilink error 13 | ``` 14 | 15 | Linking an element as a clone multiple times is ok: 16 | ``` 17 | var linker = $compile(template); 18 | linker($scope, function() { ... }); //=> ok 19 | linker($scope, function() { ... }); //=> ok 20 | ``` 21 | 22 | However once an element has been linked it can not be re-linked as a clone: 23 | ``` 24 | var linker = $compile(template); 25 | linker($scope); //=> ok 26 | linker($scope, function() { ... }); //=> multilink error 27 | ``` -------------------------------------------------------------------------------- /docs/content/error/$compile/noctrl.ngdoc: -------------------------------------------------------------------------------- 1 | @ngdoc error 2 | @name $compile:noctrl 3 | @fullName Controller is required. 4 | @description 5 | 6 | When using the `bindToController` feature of AngularJS, a directive is required 7 | to have a Controller. A controller may be specified by adding a "controller" 8 | property to the directive definition object. Its value should be either a 9 | string, or an invokable object (a function, or an array whose last element is a 10 | function). 11 | 12 | For more information, see the {@link guide/directive directives guide}. 13 | -------------------------------------------------------------------------------- /docs/content/error/$compile/nodomevents.ngdoc: -------------------------------------------------------------------------------- 1 | @ngdoc error 2 | @name $compile:nodomevents 3 | @fullName Event Attribute/Property Binding 4 | @description 5 | 6 | This error occurs when one tries to create a binding for event handler attributes or properties like `onclick`, `onload`, `onsubmit`, etc. 7 | 8 | There is no practical value in binding to these attributes/properties and doing so only exposes your application to security vulnerabilities like XSS. 9 | For these reasons binding to event handler attributes and properties (`formaction` and all starting with `on`) is not supported. 10 | 11 | 12 | An example code that would allow XSS vulnerability by evaluating user input in the window context could look like this: 13 | ``` 14 | 15 |
    click me
    16 | ``` 17 | 18 | Since the `onclick` evaluates the value as JavaScript code in the window context, setting the `username` model to a value like `javascript:alert('PWND')` would result in script injection when the `div` is clicked. 19 | 20 | Please use the `ng-*` or `ng-on-*` versions instead (such as `ng-click` or `ng-on-click` rather than `onclick`). 21 | -------------------------------------------------------------------------------- /docs/content/error/$compile/selmulti.ngdoc: -------------------------------------------------------------------------------- 1 | @ngdoc error 2 | @name $compile:selmulti 3 | @fullName Binding to Multiple Attribute 4 | @description 5 | 6 | Binding to the `multiple` attribute of `select` element is not supported since switching between multiple and single mode changes the {@link ng.directive:ngModel `ngModel`} object type from instance to array of instances which breaks the model semantics. 7 | 8 | If you need to use different types of `select` elements in your template based on some variable, please use {@link ng.directive:ngIf ngIf} or {@link ng.directive:ngSwitch ngSwitch} directives to select one of them to be used at runtime. 9 | 10 | 11 | Example with invalid usage: 12 | ``` 13 | 14 | ``` 15 | 16 | Example that uses ngIf to pick one of the `select` elements based on a variable: 17 | ``` 18 | 19 | 20 | ``` 21 | -------------------------------------------------------------------------------- /docs/content/error/$compile/srcset.ngdoc: -------------------------------------------------------------------------------- 1 | @ngdoc error 2 | @name $compile:srcset 3 | @fullName Invalid value passed to `attr.$set('srcset', value)` 4 | @description 5 | 6 | This error occurs if you try to programmatically set the `srcset` attribute with a non-string value. 7 | 8 | This can be the case if you tried to avoid the automatic sanitization of the `srcset` value by 9 | passing a "trusted" value provided by calls to `$sce.trustAsMediaUrl(value)`. 10 | 11 | If you want to programmatically set explicitly trusted unsafe URLs, you should use `$sce.trustAsHtml` 12 | on the whole `img` tag and inject it into the DOM using the `ng-bind-html` directive. 13 | -------------------------------------------------------------------------------- /docs/content/error/$compile/uterdir.ngdoc: -------------------------------------------------------------------------------- 1 | @ngdoc error 2 | @name $compile:uterdir 3 | @fullName Unterminated Directive 4 | @description 5 | 6 | This error occurs when using multi-element directives and a `directive-start` attribute fails to form a matching pair with a corresponding `directive-end` attribute. 7 | A `directive-start` should have a matching `directive-end` on a sibling node in the DOM. For instance, 8 | 9 | ``` 10 | 11 | I get repeated 12 | I also get repeated 13 |
    14 | ``` 15 | 16 | is a valid example. 17 | 18 | This error can occur in several different ways. One is by leaving out the `directive-end` attribute, like so: 19 | 20 | ``` 21 |
    22 | 23 |
    24 | ``` 25 | 26 | Another is by nesting a `directive-end` inside of `directive-start`, or vice versa: 27 | 28 | ``` 29 |
    30 | 31 |
    32 | ``` 33 | 34 | To avoid this error, make sure each `directive-start` you use has a matching `directive-end` on a sibling node in the DOM. 35 | -------------------------------------------------------------------------------- /docs/content/error/$controller/noscp.ngdoc: -------------------------------------------------------------------------------- 1 | @ngdoc error 2 | @name $controller:noscp 3 | @fullName Missing $scope object 4 | @description 5 | 6 | This error occurs when {@link ng.$controller $controller} service is called in order to instantiate a new controller but no scope is provided via `$scope` property of the locals map. 7 | 8 | Example of incorrect usage that leads to this error: 9 | ``` 10 | $controller(MyController); 11 | //or 12 | $controller(MyController, {scope: newScope}); 13 | ``` 14 | 15 | To fix the example above please provide a scope (using the `$scope` property in the locals object) to the $controller call: 16 | 17 | ``` 18 | $controller(MyController, {$scope: newScope}); 19 | ``` 20 | 21 | Please consult the {@link ng.$controller $controller} service api docs to learn more. 22 | -------------------------------------------------------------------------------- /docs/content/error/$http/baddata.ngdoc: -------------------------------------------------------------------------------- 1 | @ngdoc error 2 | @name $http:baddata 3 | @fullName Bad JSON Data 4 | @description 5 | 6 | The default {@link ng.$http#default-transformations `transformResponse`} will try to parse the 7 | response as JSON if the `Content-Type` header is `application/json`, or the response looks like a 8 | valid JSON-stringified object or array. 9 | This error occurs when that data is not a valid JSON object. 10 | 11 | To resolve this error, make sure you pass valid JSON data to `transformResponse`. If the response 12 | data looks like JSON, but has a different `Content-Type` header, you must 13 | {@link ng.$http#overriding-the-default-transformations-per-request implement your own response 14 | transformer on a per request basis}, or {@link ng.$http#default-transformations modify the default `$http` responseTransform}. 15 | -------------------------------------------------------------------------------- /docs/content/error/$http/badjsonp.ngdoc: -------------------------------------------------------------------------------- 1 | @ngdoc error 2 | @name $http:badjsonp 3 | @fullName Bad JSONP Request Configuration 4 | @description 5 | 6 | This error occurs when the URL generated from the configuration object contains a parameter with the 7 | same name as the configured `jsonpCallbackParam` property; or when it contains a parameter whose 8 | value is `JSON_CALLBACK`. 9 | 10 | `$http` JSONP requests need to attach a callback query parameter to the URL. The name of this 11 | parameter is specified in the configuration object (or in the defaults) via the `jsonpCallbackParam` 12 | property. You must not provide your own parameter with this name in the configuration of the request. 13 | 14 | In previous versions of AngularJS, you specified where to add the callback parameter value via the 15 | `JSON_CALLBACK` placeholder. This is no longer allowed. 16 | 17 | To resolve this error, remove any parameters that have the same name as the `jsonpCallbackParam`; 18 | and/or remove any parameters that have a value of `JSON_CALLBACK`. 19 | 20 | For more information, see the {@link ng.$http#jsonp `$http.jsonp()`} method API documentation. 21 | -------------------------------------------------------------------------------- /docs/content/error/$http/badreq.ngdoc: -------------------------------------------------------------------------------- 1 | @ngdoc error 2 | @name $http:badreq 3 | @fullName Bad Request Configuration 4 | @description 5 | 6 | This error occurs when the request configuration parameter passed to the {@link ng.$http `$http`} service is not a valid object. 7 | `$http` expects a single parameter, the request configuration object, but received a parameter that was not an object or did not contain valid properties. 8 | 9 | The error message should provide additional context such as the actual value of the parameter that was received. 10 | If you passed a string parameter, perhaps you meant to call one of the shorthand methods on `$http` such as `$http.get(…)`, etc. 11 | 12 | To resolve this error, make sure you pass a valid request configuration object to `$http`. 13 | 14 | For more information, see the {@link ng.$http `$http`} service API documentation. 15 | -------------------------------------------------------------------------------- /docs/content/error/$injector/cdep.ngdoc: -------------------------------------------------------------------------------- 1 | @ngdoc error 2 | @name $injector:cdep 3 | @fullName Circular Dependency 4 | @description 5 | 6 | This error occurs when the {@link angular.injector $injector} tries to get 7 | a service that depends on itself, either directly or indirectly. To fix this, 8 | construct your dependency chain such that there are no circular dependencies. 9 | 10 | For example: 11 | 12 | ``` 13 | angular.module('myApp', []) 14 | .factory('myService', function (myService) { 15 | // ... 16 | }) 17 | .controller('MyCtrl', function ($scope, myService) { 18 | // ... 19 | }); 20 | ``` 21 | 22 | When an instance of `MyCtrl` is created, the service `myService` will be created 23 | by the `$injector`. `myService` depends on itself, which causes the `$injector` 24 | to detect a circular dependency and throw the error. 25 | 26 | For more information, see the {@link guide/di Dependency Injection Guide}. 27 | -------------------------------------------------------------------------------- /docs/content/error/$injector/itkn.ngdoc: -------------------------------------------------------------------------------- 1 | @ngdoc error 2 | @name $injector:itkn 3 | @fullName Bad Injection Token 4 | @description 5 | 6 | This error occurs when using a bad token as a dependency injection annotation. 7 | Dependency injection annotation tokens should always be strings. Using any other 8 | type will cause this error to be thrown. 9 | 10 | Examples of code with bad injection tokens include: 11 | 12 | ``` 13 | var myCtrl = function ($scope, $http) { /* ... */ }; 14 | myCtrl.$inject = ['$scope', 42]; 15 | 16 | myAppModule.controller('MyCtrl', ['$scope', {}, function ($scope, $timeout) { 17 | // ... 18 | }]); 19 | ``` 20 | 21 | The bad injection tokens are `42` in the first example and `{}` in the second. 22 | To avoid the error, always use string literals for dependency injection annotation 23 | tokens. 24 | 25 | For an explanation of what injection annotations are and how to use them, refer 26 | to the {@link guide/di Dependency Injection Guide}. 27 | -------------------------------------------------------------------------------- /docs/content/error/$injector/pget.ngdoc: -------------------------------------------------------------------------------- 1 | @ngdoc error 2 | @name $injector:pget 3 | @fullName Provider Missing $get 4 | @description 5 | 6 | This error occurs when attempting to register a provider that does not have a 7 | `$get` method. For example: 8 | 9 | ``` 10 | function BadProvider() {} // No $get method! 11 | angular.module("myApp", []) 12 | .provider('bad', BadProvider); // this throws the error 13 | ``` 14 | 15 | To fix the error, fill in the `$get` method on the provider like so: 16 | 17 | ``` 18 | function GoodProvider() { 19 | this.$get = angular.noop; 20 | } 21 | angular.module("myApp", []) 22 | .provider('good', GoodProvider); 23 | ``` 24 | 25 | For more information, refer to the {@link auto.$provide#provider 26 | $provide.provider} api doc. 27 | -------------------------------------------------------------------------------- /docs/content/error/$injector/undef.ngdoc: -------------------------------------------------------------------------------- 1 | @ngdoc error 2 | @name $injector:undef 3 | @fullName Undefined Value 4 | @description 5 | 6 | This error results from registering a factory which does not return a value (or whose return value is undefined). 7 | 8 | The following is an example of a factory which will throw this error upon injection: 9 | 10 | ```js 11 | angular.module("badModule", []). 12 | factory("badFactory", function() { 13 | doLotsOfThings(); 14 | butDontReturnAValue(); 15 | }); 16 | ``` 17 | 18 | In order to prevent the error, return a value of some sort, such as an object which exposes an API for working 19 | with the injected object. 20 | 21 | ```js 22 | angular.module("goodModule", []). 23 | factory("goodFactory", function() { 24 | doLotsOfThings(); 25 | butDontReturnAValue(); 26 | 27 | return { 28 | doTheThing: function methodThatDoesAThing() { 29 | } 30 | }; 31 | }); 32 | ``` 33 | 34 | -------------------------------------------------------------------------------- /docs/content/error/$interpolate/badexpr.ngdoc: -------------------------------------------------------------------------------- 1 | @ngdoc error 2 | @name $interpolate:badexpr 3 | @fullName Expecting end operator 4 | @description 5 | 6 | The AngularJS expression is missing the corresponding closing operator. 7 | -------------------------------------------------------------------------------- /docs/content/error/$interpolate/dupvalue.ngdoc: -------------------------------------------------------------------------------- 1 | @ngdoc error 2 | @name $interpolate:dupvalue 3 | @fullName Duplicate choice in plural/select 4 | @description 5 | 6 | You have repeated a match selection for your plural or select MessageFormat 7 | extension in your interpolation expression. The different choices have to be unique. 8 | 9 | For more information about the MessageFormat syntax in interpolation 10 | expressions, please refer to MessageFormat extensions section at 11 | {@link guide/i18n#MessageFormat AngularJS i18n MessageFormat} 12 | -------------------------------------------------------------------------------- /docs/content/error/$interpolate/interr.ngdoc: -------------------------------------------------------------------------------- 1 | @ngdoc error 2 | @name $interpolate:interr 3 | @fullName Interpolation Error 4 | @description 5 | 6 | This error occurs when interpolation fails due to some exception. The error 7 | message above should provide additional context. 8 | -------------------------------------------------------------------------------- /docs/content/error/$interpolate/logicbug.ngdoc: -------------------------------------------------------------------------------- 1 | @ngdoc error 2 | @name $interpolate:logicbug 3 | @fullName Bug in ngMessageFormat module 4 | @description 5 | 6 | You've just hit a bug in the ngMessageFormat module provided by angular-message-format.min.js. 7 | Please file a github issue for this and provide the interpolation text that caused you to hit this 8 | bug mentioning the exact version of AngularJS used and we will fix it! 9 | 10 | For more information about the MessageFormat syntax in interpolation 11 | expressions, please refer to MessageFormat extensions section at 12 | {@link guide/i18n#MessageFormat AngularJS i18n MessageFormat} 13 | -------------------------------------------------------------------------------- /docs/content/error/$interpolate/nochgmustache.ngdoc: -------------------------------------------------------------------------------- 1 | @ngdoc error 2 | @name $interpolate:nochgmustache 3 | @fullName Redefinition of start/endSymbol incompatible with MessageFormat extensions 4 | @description 5 | 6 | You have redefined `$interpolate.startSymbol`/`$interpolate.endSymbol` and also 7 | loaded the `ngMessageFormat` module (provided by angular-message-format.min.js) 8 | while creating your injector. 9 | 10 | `ngMessageFormat` currently does not support redefinition of the 11 | startSymbol/endSymbol used by `$interpolate`. If this is affecting you, please 12 | file an issue and mention @chirayuk on it. This is intended to be fixed in a 13 | future commit and the github issue will help gauge urgency. 14 | 15 | For more information about the MessageFormat syntax in interpolation 16 | expressions, please refer to MessageFormat extensions section at 17 | {@link guide/i18n#MessageFormat AngularJS i18n MessageFormat} 18 | -------------------------------------------------------------------------------- /docs/content/error/$interpolate/noconcat.ngdoc: -------------------------------------------------------------------------------- 1 | @ngdoc error 2 | @name $interpolate:noconcat 3 | @fullName Multiple Expressions 4 | @description 5 | 6 | This error occurs when performing an interpolation that concatenates multiple 7 | expressions when a trusted value is required. Concatenating expressions makes 8 | it hard to reason about whether some combination of concatenated values are 9 | unsafe to use and could easily lead to XSS. 10 | 11 | For more information about how AngularJS helps keep your app secure, refer to 12 | the {@link ng.$sce $sce} API doc. 13 | -------------------------------------------------------------------------------- /docs/content/error/$interpolate/reqarg.ngdoc: -------------------------------------------------------------------------------- 1 | @ngdoc error 2 | @name $interpolate:reqarg 3 | @fullName Missing required argument for MessageFormat 4 | @description 5 | 6 | You must specify the MessageFormat function that you're using right after the 7 | comma following the AngularJS expression. Currently, the supported functions are 8 | "plural" and "select" (for gender selections.) 9 | 10 | For more information about the MessageFormat syntax in interpolation 11 | expressions, please refer to MessageFormat extensions section at 12 | {@link guide/i18n#MessageFormat AngularJS i18n MessageFormat} 13 | -------------------------------------------------------------------------------- /docs/content/error/$interpolate/reqcomma.ngdoc: -------------------------------------------------------------------------------- 1 | @ngdoc error 2 | @name $interpolate:reqcomma 3 | @fullName Missing comma following MessageFormat plural/select keyword 4 | @description 5 | 6 | The MessageFormat syntax requires a comma following the "plural" or "select" 7 | extension keyword in the extended interpolation syntax. 8 | 9 | For more information about the MessageFormat syntax in interpolation 10 | expressions, please refer to MessageFormat extensions section at 11 | {@link guide/i18n#MessageFormat AngularJS i18n MessageFormat} 12 | -------------------------------------------------------------------------------- /docs/content/error/$interpolate/reqendbrace.ngdoc: -------------------------------------------------------------------------------- 1 | @ngdoc error 2 | @name $interpolate:reqendbrace 3 | @fullName Unterminated message for plural/select value 4 | @description 5 | 6 | The plural or select message for a value or keyword choice has no matching end 7 | brace to mark the end of the message. 8 | 9 | For more information about the MessageFormat syntax in interpolation 10 | expressions, please refer to MessageFormat extensions section at 11 | {@link guide/i18n#MessageFormat AngularJS i18n MessageFormat} 12 | -------------------------------------------------------------------------------- /docs/content/error/$interpolate/reqendinterp.ngdoc: -------------------------------------------------------------------------------- 1 | @ngdoc error 2 | @name $interpolate:reqendinterp 3 | @fullName Unterminated interpolation 4 | @description 5 | 6 | The interpolation text does not have an ending `endSymbol` ("}}" by default) and is unterminated. 7 | -------------------------------------------------------------------------------- /docs/content/error/$interpolate/reqopenbrace.ngdoc: -------------------------------------------------------------------------------- 1 | @ngdoc error 2 | @name $interpolate:reqopenbrace 3 | @fullName An opening brace was expected but not found 4 | @description 5 | 6 | The plural or select extension keyword or values (such as "other", "male", 7 | "female", "=0", "one", "many", etc.) MUST be followed by a message enclosed in 8 | braces. 9 | 10 | For more information about the MessageFormat syntax in interpolation 11 | expressions, please refer to MessageFormat extensions section at 12 | {@link guide/i18n#MessageFormat AngularJS i18n MessageFormat} 13 | -------------------------------------------------------------------------------- /docs/content/error/$interpolate/reqother.ngdoc: -------------------------------------------------------------------------------- 1 | @ngdoc error 2 | @name $interpolate:reqother 3 | @fullName Required choice "other" for select/plural in MessageFormat 4 | @description 5 | 6 | Your interpolation expression with a MessageFormat extension for either 7 | "plural" or "select" (typically used for gender selection) does not contain a 8 | message for the choice "other". Using either select or plural MessageFormat 9 | extensions require that you provide a message for the selection "other". 10 | 11 | For more information about the MessageFormat syntax in interpolation 12 | expressions, please refer to MessageFormat extensions section at 13 | {@link guide/i18n#MessageFormat AngularJS i18n MessageFormat} 14 | -------------------------------------------------------------------------------- /docs/content/error/$interpolate/unknarg.ngdoc: -------------------------------------------------------------------------------- 1 | @ngdoc error 2 | @name $interpolate:unknarg 3 | @fullName Unrecognized MessageFormat extension 4 | @description 5 | 6 | The MessageFormat extensions provided by `ngMessageFormat` are currently 7 | limited to "plural" and "select". The extension that you have used is either 8 | unsupported or invalid. 9 | 10 | For more information about the MessageFormat syntax in interpolation 11 | expressions, please refer to MessageFormat extensions section at 12 | {@link guide/i18n#MessageFormat AngularJS i18n MessageFormat} 13 | -------------------------------------------------------------------------------- /docs/content/error/$interpolate/unsafe.ngdoc: -------------------------------------------------------------------------------- 1 | @ngdoc error 2 | @name $interpolate:unsafe 3 | @fullName MessageFormat extensions not allowed in secure context 4 | @description 5 | 6 | You have attempted to use a MessageFormat extension in your interpolation expression that is marked as a secure context. For security purposes, this is not supported. 7 | 8 | Read more about secure contexts at {@link ng.$sce Strict Contextual Escaping 9 | (SCE)} and about the MessageFormat extensions at {@link 10 | guide/i18n#MessageFormat AngularJS i18n MessageFormat}. 11 | -------------------------------------------------------------------------------- /docs/content/error/$interpolate/untermstr.ngdoc: -------------------------------------------------------------------------------- 1 | @ngdoc error 2 | @name $interpolate:untermstr 3 | @fullName Unterminated string literal 4 | @description 5 | 6 | The string literal was not terminated in your AngularJS expression. 7 | -------------------------------------------------------------------------------- /docs/content/error/$interpolate/wantstring.ngdoc: -------------------------------------------------------------------------------- 1 | @ngdoc error 2 | @name $interpolate:wantstring 3 | @fullName Expected the beginning of a string 4 | @description 5 | 6 | We expected to see the beginning of a string (either a single quote or a double 7 | quote character) in the expression but it was not found. The expression is 8 | invalid. If this is incorrect, please file an issue on github. 9 | -------------------------------------------------------------------------------- /docs/content/error/$interval/badprom.ngdoc: -------------------------------------------------------------------------------- 1 | @ngdoc error 2 | @name $interval:badprom 3 | @fullName Non-$interval promise 4 | @description 5 | 6 | This error occurs when calling {@link ng.$interval#cancel $interval.cancel()} with a promise that 7 | was not generated by the {@link ng.$interval $interval} service. This can, for example, happen when 8 | calling {@link ng.$q#the-promise-api then()/catch()} on the returned promise, which creates a new 9 | promise, and pass that new promise to {@link ng.$interval#cancel $interval.cancel()}. 10 | 11 | Example of incorrect usage that leads to this error: 12 | 13 | ```js 14 | var promise = $interval(doSomething, 1000, 5).then(doSomethingElse); 15 | $interval.cancel(promise); 16 | ``` 17 | 18 | To fix the example above, keep a reference to the promise returned by 19 | {@link ng.$interval $interval()} and pass that to {@link ng.$interval#cancel $interval.cancel()}: 20 | 21 | ```js 22 | var promise = $interval(doSomething, 1000, 5); 23 | var newPromise = promise.then(doSomethingElse); 24 | $interval.cancel(promise); 25 | ``` 26 | -------------------------------------------------------------------------------- /docs/content/error/$location/badpath.ngdoc: -------------------------------------------------------------------------------- 1 | @ngdoc error 2 | @name $location:badpath 3 | @fullName Invalid Path 4 | @description 5 | 6 | This error occurs when the path of a location contains invalid characters. 7 | The most common fault is when the path starts with double slashes (`//`) or backslashes ('\\'). 8 | For example if the base path of an application is `https://a.b.c/` then the following path is 9 | invalid `https://a.b.c///d/e/f`. 10 | -------------------------------------------------------------------------------- /docs/content/error/$location/ipthprfx.ngdoc: -------------------------------------------------------------------------------- 1 | @ngdoc error 2 | @name $location:ipthprfx 3 | @fullName Invalid or Missing Path Prefix 4 | @description 5 | 6 | This error occurs when you configure the {@link ng.$location `$location`} service in the html5 mode, specify a base url for your application via `` element and try to update the location with a path that doesn't match the base prefix. 7 | 8 | To resolve this issue, please check the base url specified via the `` tag in the head of your main html document, as well as the url that you tried to set the location to. 9 | -------------------------------------------------------------------------------- /docs/content/error/$location/isrcharg.ngdoc: -------------------------------------------------------------------------------- 1 | @ngdoc error 2 | @name $location:isrcharg 3 | @fullName Wrong $location.search() argument type 4 | @description 5 | 6 | To resolve this error, ensure that the first argument for the `$location.search` call is a `string` or an object. 7 | You can use the stack trace associated with this error to identify the call site that caused this issue. 8 | 9 | To learn more, please consult the {@link ng.$location `$location`} api docs. 10 | -------------------------------------------------------------------------------- /docs/content/error/$location/nostate.ngdoc: -------------------------------------------------------------------------------- 1 | @ngdoc error 2 | @name $location:nostate 3 | @fullName History API state support is available only in HTML5 mode and only in browsers supporting HTML5 History API 4 | @description 5 | 6 | This error occurs when the {@link ng.$location#state $location.state} method is used when {@link ng.$locationProvider#html5Mode $locationProvider.html5Mode} is not turned on or the browser used doesn't support the HTML5 History API (for example, IE9 or Android 2.3). 7 | 8 | To avoid this error, either drop support for those older browsers or avoid using this method. 9 | -------------------------------------------------------------------------------- /docs/content/error/$parse/esc.ngdoc: -------------------------------------------------------------------------------- 1 | @ngdoc error 2 | @name $parse:esc 3 | @fullName Value cannot be escaped 4 | @description 5 | 6 | Occurs when the parser tries to escape a value that is not known. 7 | 8 | This should never occur in practice. If it does then that indicates a programming 9 | error in the AngularJS `$parse` service itself and should be reported as an issue 10 | at https://github.com/angular/angular.js/issues. -------------------------------------------------------------------------------- /docs/content/error/$parse/lexerr.ngdoc: -------------------------------------------------------------------------------- 1 | @ngdoc error 2 | @name $parse:lexerr 3 | @fullName Lexer Error 4 | @description 5 | 6 | Occurs when an expression has a lexical error, for example a malformed number (0.5e-) or an invalid unicode escape. 7 | 8 | The error message contains a more precise error. 9 | 10 | To resolve, learn more about {@link guide/expression AngularJS expressions}, identify the error and fix the expression's syntax. 11 | -------------------------------------------------------------------------------- /docs/content/error/$parse/lval.ngdoc: -------------------------------------------------------------------------------- 1 | @ngdoc error 2 | @name $parse:lval 3 | @fullName Trying to assign a value to a non l-value 4 | @description 5 | 6 | Occurs when an expression is trying to assign a value to a non-assignable expression. 7 | 8 | This can happen if the left side of an assignment is not a valid reference to a variable 9 | or property. E.g. In the following snippet `1+2` is not assignable. 10 | 11 | ``` 12 | (1+2) = 'hello'; 13 | ``` 14 | -------------------------------------------------------------------------------- /docs/content/error/$parse/syntax.ngdoc: -------------------------------------------------------------------------------- 1 | @ngdoc error 2 | @name $parse:syntax 3 | @fullName Syntax Error 4 | @description 5 | 6 | Occurs when there is a syntax error in an expression. These errors are thrown while compiling the expression. 7 | The error message contains a more precise description of the error, including the location (column) in the expression where the error occurred. 8 | 9 | To resolve, learn more about {@link guide/expression AngularJS expressions}, identify the error and fix the expression's syntax. 10 | -------------------------------------------------------------------------------- /docs/content/error/$parse/ueoe.ngdoc: -------------------------------------------------------------------------------- 1 | @ngdoc error 2 | @name $parse:ueoe 3 | @fullName Unexpected End of Expression 4 | @description 5 | 6 | Occurs when an expression is missing tokens at the end of the expression. 7 | 8 | For example, forgetting to close a bracket or failing to properly escape quotes in an expression 9 | will trigger this error. 10 | 11 | To resolve, learn more about {@link guide/expression AngularJS expressions}, identify the error and 12 | fix the expression's syntax. 13 | -------------------------------------------------------------------------------- /docs/content/error/$q/norslvr.ngdoc: -------------------------------------------------------------------------------- 1 | @ngdoc error 2 | @name $q:norslvr 3 | @fullName No resolver function passed to $Q 4 | @description 5 | 6 | Occurs when calling creating a promise using {@link $q} as a constructor, without providing the 7 | required `resolver` function. 8 | 9 | ``` 10 | //bad 11 | var promise = $q().then(doSomething); 12 | 13 | //good 14 | var promise = $q(function(resolve, reject) { 15 | waitForSomethingAsync.then(resolve); 16 | }).then(doSomething); 17 | ``` 18 | -------------------------------------------------------------------------------- /docs/content/error/$q/qcycle.ngdoc: -------------------------------------------------------------------------------- 1 | @ngdoc error 2 | @name $q:qcycle 3 | @fullName Cannot resolve a promise with itself 4 | @description 5 | 6 | Occurs when resolving a promise with itself as the value, including returning the promise in a 7 | function passed to `then`. The A+ 1.1 spec mandates that this behavior throw a TypeError. 8 | https://github.com/promises-aplus/promises-spec#the-promise-resolution-procedure 9 | 10 | ``` 11 | var promise = $q.defer().promise; 12 | 13 | //bad 14 | promise.then(function (val) { 15 | //Cannot return self 16 | return promise; 17 | }); 18 | 19 | //good 20 | promise.then(function (val) { 21 | return 'some other value'; 22 | }); 23 | ``` 24 | -------------------------------------------------------------------------------- /docs/content/error/$resource/badargs.ngdoc: -------------------------------------------------------------------------------- 1 | @ngdoc error 2 | @name $resource:badargs 3 | @fullName Too Many Arguments 4 | @description 5 | 6 | This error occurs when specifying too many arguments to a {@link ngResource.$resource `$resource`} action, such as `get`, `query` or any user-defined custom action. 7 | These actions may take up to 4 arguments. 8 | 9 | For more information, refer to the {@link ngResource.$resource `$resource`} API reference documentation. 10 | -------------------------------------------------------------------------------- /docs/content/error/$resource/badcfg.ngdoc: -------------------------------------------------------------------------------- 1 | @ngdoc error 2 | @name $resource:badcfg 3 | @fullName Response does not match configured parameter 4 | @description 5 | 6 | This error occurs when the {@link ngResource.$resource `$resource`} service expects a response that can be deserialized as an array but receives an object, or vice versa. 7 | By default, all resource actions expect objects, except `query` which expects arrays. 8 | 9 | To resolve this error, make sure your `$resource` configuration matches the actual format of the data returned from the server. 10 | 11 | For more information, see the {@link ngResource.$resource `$resource`} API reference documentation. 12 | -------------------------------------------------------------------------------- /docs/content/error/$resource/badmember.ngdoc: -------------------------------------------------------------------------------- 1 | @ngdoc error 2 | @name $resource:badmember 3 | @fullName Syntax error in param value using @member lookup 4 | @description 5 | 6 | Occurs when there is a syntax error when attempting to extract a param 7 | value from the data object. 8 | 9 | Here's an example of valid syntax for `params` or `paramsDefault`: 10 | 11 | ````javascript 12 | { 13 | bar: '@foo.bar' 14 | } 15 | ```` 16 | 17 | The part following the `@`, `foo.bar` in this case, should be a simple 18 | dotted member lookup using only ASCII identifiers. This error occurs 19 | when there is an error in that expression. The following are all syntax 20 | errors 21 | 22 | | Value | Error | 23 | |---------|----------------| 24 | | `@` | Empty expression following `@`. | 25 | | `@1.a` | `1` is an invalid javascript identifier. | 26 | | `@.a` | Leading `.` is invalid. | 27 | | `@a[1]` | Only dotted lookups are supported (no index operator) | 28 | -------------------------------------------------------------------------------- /docs/content/error/$resource/badname.ngdoc: -------------------------------------------------------------------------------- 1 | @ngdoc error 2 | @name $resource:badname 3 | @fullName Cannot use hasOwnProperty as a parameter name 4 | @description 5 | 6 | Occurs when you try to use the name `hasOwnProperty` as a name of a parameter. 7 | Generally, a name cannot be `hasOwnProperty` because it is used, internally, on a object 8 | and allowing such a name would break lookups on this object. 9 | -------------------------------------------------------------------------------- /docs/content/error/$route/norout.ngdoc: -------------------------------------------------------------------------------- 1 | @ngdoc error 2 | @name $route:norout 3 | @fullName Tried updating route with no current route 4 | @description 5 | 6 | Occurs when an attempt is made to update the parameters on the current route when 7 | there is no current route. This can happen if you try to call `$route.updateParams();` 8 | before the first route transition has completed. -------------------------------------------------------------------------------- /docs/content/error/$sanitize/elclob.ngdoc: -------------------------------------------------------------------------------- 1 | @ngdoc error 2 | @name $sanitize:elclob 3 | @fullName Failed to sanitize html because the element is clobbered 4 | @description 5 | 6 | This error occurs when `$sanitize` sanitizer is unable to traverse the HTML because one or more of the elements in the 7 | HTML have been "clobbered". This could be a sign that the payload contains code attempting to cause a DoS attack on the 8 | browser. 9 | 10 | Typically clobbering breaks the `nextSibling` property on an element so that it points to one of its child nodes. This 11 | makes it impossible to walk the HTML tree without getting stuck in an infinite loop, which causes the browser to freeze. -------------------------------------------------------------------------------- /docs/content/error/$sanitize/noinert.ngdoc: -------------------------------------------------------------------------------- 1 | @ngdoc error 2 | @name $sanitize:noinert 3 | @fullName Can't create an inert html document 4 | @description 5 | 6 | This error occurs when `$sanitize` sanitizer determines that `document.implementation.createHTMLDocument ` api is not supported by the current browser. 7 | 8 | This api is necessary for safe parsing of HTML strings into DOM trees and without it the sanitizer can't sanitize the input. 9 | 10 | The api is present in all supported browsers including IE 9.0, so the presence of this error usually indicates that AngularJS's `$sanitize` is being used on an unsupported platform. 11 | -------------------------------------------------------------------------------- /docs/content/error/$sanitize/uinput.ngdoc: -------------------------------------------------------------------------------- 1 | @ngdoc error 2 | @name $sanitize:uinput 3 | @fullName Failed to sanitize html because the input is unstable 4 | @description 5 | 6 | This error occurs when `$sanitize` sanitizer tries to check the input for possible mXSS payload and the verification 7 | errors due to the input mutating indefinitely. This could be a sign that the payload contains code exploiting an mXSS 8 | vulnerability in the browser. 9 | 10 | mXSS attack exploit browser bugs that cause some browsers parse a certain html strings into DOM, which once serialized 11 | doesn't match the original input. These browser bugs can be exploited by attackers to create payload which looks 12 | harmless to sanitizers, but due to mutations caused by the browser are turned into dangerous code once processed after 13 | sanitization. 14 | -------------------------------------------------------------------------------- /docs/content/error/$sce/icontext.ngdoc: -------------------------------------------------------------------------------- 1 | @ngdoc error 2 | @name $sce:icontext 3 | @fullName Invalid / Unknown SCE context 4 | @description 5 | 6 | The context enum passed to {@link ng.$sce#trustAs $sce.trustAs} was not recognized. 7 | 8 | Please consult the list of {@link ng.$sce#contexts supported Strict Contextual Escaping (SCE) contexts}. 9 | -------------------------------------------------------------------------------- /docs/content/error/$sce/iequirks.ngdoc: -------------------------------------------------------------------------------- 1 | @ngdoc error 2 | @name $sce:iequirks 3 | @fullName IE<11 in quirks mode is unsupported 4 | @description 5 | 6 | This error occurs when you are using AngularJS with {@link ng.$sce Strict Contextual Escaping (SCE)} mode enabled (the default) on IE10 or lower in quirks mode. 7 | 8 | In this mode, IE<11 allow one to execute arbitrary javascript by the use of the `expression()` syntax and is not supported. 9 | Refer 10 | [CSS expressions no longer supported for the Internet zone](http://msdn.microsoft.com/en-us/library/ie/dn384050(v=vs.85).aspx) 11 | to learn more about them. 12 | 13 | To resolve this error please specify the proper doctype at the top of your main html document: 14 | 15 | ``` 16 | 17 | ``` 18 | -------------------------------------------------------------------------------- /docs/content/error/$sce/imatcher.ngdoc: -------------------------------------------------------------------------------- 1 | @ngdoc error 2 | @name $sce:imatcher 3 | @fullName Invalid matcher (only string patterns and RegExp instances are supported) 4 | @description 5 | 6 | Please see {@link $sceDelegateProvider#trustedResourceUrlList 7 | $sceDelegateProvider.trustedResourceUrlList} and {@link 8 | $sceDelegateProvider#bannedResourceUrlList $sceDelegateProvider.bannedResourceUrlList} for the 9 | list of acceptable items. 10 | -------------------------------------------------------------------------------- /docs/content/error/$sce/itype.ngdoc: -------------------------------------------------------------------------------- 1 | @ngdoc error 2 | @name $sce:itype 3 | @fullName String Value is Required for SCE Trust Call 4 | @description 5 | 6 | {@link ng.$sce#trustAs $sce.trustAs} requires a string value. 7 | 8 | Read more about {@link ng.$sce Strict Contextual Escaping (SCE)} in AngularJS. 9 | -------------------------------------------------------------------------------- /docs/content/error/$sce/iwcard.ngdoc: -------------------------------------------------------------------------------- 1 | @ngdoc error 2 | @name $sce:iwcard 3 | @fullName The sequence *** is not a valid pattern wildcard 4 | @description 5 | 6 | The strings in {@link $sceDelegateProvider#trustedResourceUrlList 7 | $sceDelegateProvider.trustedResourceUrlList} and {@link 8 | $sceDelegateProvider#bannedResourceUrlList $sceDelegateProvider.bannedResourceUrlList} may not 9 | contain the undefined sequence `***`. Only `*` and `**` wildcard patterns are defined. 10 | -------------------------------------------------------------------------------- /docs/content/error/$sce/unsafe.ngdoc: -------------------------------------------------------------------------------- 1 | @ngdoc error 2 | @name $sce:unsafe 3 | @fullName Require a safe/trusted value 4 | @description 5 | 6 | The value provided for use in a specific context was not found to be safe/trusted for use. 7 | 8 | AngularJS's {@link ng.$sce Strict Contextual Escaping (SCE)} mode 9 | (enabled by default), requires bindings in certain 10 | contexts to result in a value that is trusted as safe for use in such a context. (e.g. loading an 11 | AngularJS template from a URL requires that the URL is one considered safe for loading resources.) 12 | 13 | This helps prevent XSS and other security issues. Read more at 14 | {@link ng.$sce Strict Contextual Escaping (SCE)} 15 | 16 | You may want to include the ngSanitize module to use the automatic sanitizing. 17 | -------------------------------------------------------------------------------- /docs/content/error/$templateRequest/tpload.ngdoc: -------------------------------------------------------------------------------- 1 | @ngdoc error 2 | @name $templateRequest:tpload 3 | @fullName Error Loading Template 4 | @description 5 | 6 | This error occurs when {@link $templateRequest} attempts to fetch a template from some URL, and 7 | the request fails. 8 | 9 | The template URL might be defined in a directive/component definition, an instance of `ngInclude`, 10 | an instance of `ngMessagesInclude` or a templated route in a `$route` route definition. 11 | 12 | To resolve this error, ensure that the URL of the template is spelled correctly and resolves to 13 | correct absolute URL. 14 | The [Chrome Developer Tools](https://developers.google.com/chrome-developer-tools/docs/network#network_panel_overview) 15 | might also be helpful in determining why the request failed. 16 | 17 | If you are using {@link ng.$templateCache} to pre-load templates, ensure that the cache was 18 | populated with the template. 19 | -------------------------------------------------------------------------------- /docs/content/error/$timeout/badprom.ngdoc: -------------------------------------------------------------------------------- 1 | @ngdoc error 2 | @name $timeout:badprom 3 | @fullName Non-$timeout promise 4 | @description 5 | 6 | This error occurs when calling {@link ng.$timeout#cancel $timeout.cancel()} with a promise that 7 | was not generated by the {@link ng.$timeout $timeout} service. This can, for example, happen when 8 | calling {@link ng.$q#the-promise-api then()/catch()} on the returned promise, which creates a new 9 | promise, and pass that new promise to {@link ng.$timeout#cancel $timeout.cancel()}. 10 | 11 | Example of incorrect usage that leads to this error: 12 | 13 | ```js 14 | var promise = $timeout(doSomething, 1000).then(doSomethingElse); 15 | $timeout.cancel(promise); 16 | ``` 17 | 18 | To fix the example above, keep a reference to the promise returned by 19 | {@link ng.$timeout $timeout()} and pass that to {@link ng.$timeout#cancel $timeout.cancel()}: 20 | 21 | ```js 22 | var promise = $timeout(doSomething, 1000); 23 | var newPromise = promise.then(doSomethingElse); 24 | $timeout.cancel(promise); 25 | ``` 26 | -------------------------------------------------------------------------------- /docs/content/error/index.ngdoc: -------------------------------------------------------------------------------- 1 | @ngdoc overview 2 | @name Error Reference 3 | @description 4 | 5 | # Error Reference 6 | 7 | Use the Error Reference manual to find information about error conditions in 8 | your AngularJS app. Errors thrown in production builds of AngularJS will log 9 | links to this site on the console. 10 | 11 | Other useful references for debugging your app include: 12 | 13 | - {@link api/ API Reference} for detailed information about specific features 14 | - {@link guide/ Developer Guide} for AngularJS concepts 15 | - {@link tutorial/ Tutorial} for getting started 16 | -------------------------------------------------------------------------------- /docs/content/error/jqLite/nosel.ngdoc: -------------------------------------------------------------------------------- 1 | @ngdoc error 2 | @name jqLite:nosel 3 | @fullName Unsupported Selector Lookup 4 | @description 5 | 6 | In order to keep AngularJS small, AngularJS implements only a subset of the selectors in {@link angular.element#angularjs-s-jqlite jqLite}. 7 | This error occurs when a jqLite instance is invoked with a selector other than this subset. 8 | 9 | In order to resolve this error, rewrite your code to only use tag name selectors and manually traverse the DOM using the APIs provided by jqLite. 10 | 11 | Alternatively, you can include a full version of jQuery, which AngularJS will automatically use and that will make all selectors available. 12 | -------------------------------------------------------------------------------- /docs/content/error/jqLite/offargs.ngdoc: -------------------------------------------------------------------------------- 1 | @ngdoc error 2 | @name jqLite:offargs 3 | @fullName Invalid jqLite#off() parameter 4 | @description 5 | 6 | This error occurs when trying to pass too many arguments to `jqLite#off`. Note 7 | that `jqLite#off` does not support namespaces or selectors like jQuery. 8 | -------------------------------------------------------------------------------- /docs/content/error/jqLite/onargs.ngdoc: -------------------------------------------------------------------------------- 1 | @ngdoc error 2 | @name jqLite:onargs 3 | @fullName Invalid jqLite#on() Parameters 4 | @description 5 | 6 | This error occurs when trying to pass too many arguments to `jqLite#on`. Note 7 | that `jqLite#on` does not support the `selector` or `eventData` parameters as 8 | jQuery does. 9 | -------------------------------------------------------------------------------- /docs/content/error/linky/notstring.ngdoc: -------------------------------------------------------------------------------- 1 | @ngdoc error 2 | @name linky:notstring 3 | @fullName Not a string 4 | @description 5 | 6 | This error occurs when {@link ngSanitize.linky linky} is used with a non-empty, non-string value: 7 | ```html 8 |
    9 | ``` 10 | 11 | `linky` is supposed to be used with string values only, and therefore assumes that several methods 12 | (such as `.match()`) are available on the passed in value. 13 | The value can be initialized asynchronously and therefore null or undefined won't throw this error. 14 | 15 | If you want to pass non-string values to `linky` (e.g. Objects whose `.toString()` should be 16 | utilized), you need to manually convert them to strings. 17 | -------------------------------------------------------------------------------- /docs/content/error/ng/aobj.ngdoc: -------------------------------------------------------------------------------- 1 | @ngdoc error 2 | @name ng:aobj 3 | @fullName Invalid Argument 4 | @description 5 | 6 | The argument passed should be an object. Check the value that was passed to the function where 7 | this error was thrown. 8 | -------------------------------------------------------------------------------- /docs/content/error/ng/areq.ngdoc: -------------------------------------------------------------------------------- 1 | @ngdoc error 2 | @name ng:areq 3 | @fullName Bad Argument 4 | @description 5 | 6 | AngularJS often asserts that certain values will be present and truthy using a helper function. If 7 | the assertion fails, this error is thrown. To fix this problem, make sure that the value the 8 | assertion expects is defined and matches the type mentioned in the error. 9 | 10 | If the type is `undefined`, make sure any newly added controllers/directives/services are properly 11 | defined and included in the script(s) loaded by your page. 12 | -------------------------------------------------------------------------------- /docs/content/error/ng/badname.ngdoc: -------------------------------------------------------------------------------- 1 | @ngdoc error 2 | @name ng:badname 3 | @fullName Bad `hasOwnProperty` Name 4 | @description 5 | 6 | Occurs when you try to use the name `hasOwnProperty` in a context where it is not allowed. 7 | Generally, a name cannot be `hasOwnProperty` because it is used, internally, on a object 8 | and allowing such a name would break lookups on this object. 9 | -------------------------------------------------------------------------------- /docs/content/error/ng/btstrpd.ngdoc: -------------------------------------------------------------------------------- 1 | @ngdoc error 2 | @name ng:btstrpd 3 | @fullName App Already Bootstrapped with this Element 4 | @description 5 | 6 | Occurs when calling {@link angular.bootstrap} on an element that has already been bootstrapped. 7 | 8 | This usually happens when you accidentally use both `ng-app` and `angular.bootstrap` to bootstrap an 9 | application. 10 | 11 | 12 | ``` 13 | 14 | ... 15 | 16 | 19 | 20 | 21 | ``` 22 | 23 | Note that for bootstrapping purposes, the `` element is the same as `document`, so the following 24 | will also throw an error. 25 | 26 | ``` 27 | 28 | ... 29 | 32 | 33 | ``` 34 | 35 | You can also get this error if you accidentally load AngularJS itself more than once. 36 | 37 | ``` 38 | 39 | 40 | 41 | 42 | ... 43 | 44 | 45 | 46 | 47 | ... 48 | 49 | 50 | 51 | 52 | ``` 53 | -------------------------------------------------------------------------------- /docs/content/error/ng/cpi.ngdoc: -------------------------------------------------------------------------------- 1 | @ngdoc error 2 | @name ng:cpi 3 | @fullName Bad Copy 4 | @description 5 | 6 | This error occurs when attempting to copy an object to itself. Calling {@link 7 | angular.copy angular.copy} with a `destination` object deletes 8 | all of the elements or properties on `destination` before copying to it. Copying 9 | an object to itself is not supported. Make sure to check your calls to 10 | `angular.copy` and avoid copying objects or arrays to themselves. 11 | -------------------------------------------------------------------------------- /docs/content/error/ng/cpta.ngdoc: -------------------------------------------------------------------------------- 1 | @ngdoc error 2 | @name ng:cpta 3 | @fullName Copying TypedArray 4 | @description 5 | 6 | Copying TypedArray's with a destination is not supported because TypedArray 7 | objects can not be mutated, they are fixed length. 8 | -------------------------------------------------------------------------------- /docs/content/error/ng/cpws.ngdoc: -------------------------------------------------------------------------------- 1 | @ngdoc error 2 | @name ng:cpws 3 | @fullName Copying Window or Scope 4 | @description 5 | 6 | Copying Window or Scope instances is not supported because of cyclical and self 7 | references. Avoid copying windows and scopes, as well as any other cyclical or 8 | self-referential structures. Note that trying to deep copy an object containing 9 | cyclical references that is neither a window nor a scope will cause infinite 10 | recursion and a stack overflow. 11 | -------------------------------------------------------------------------------- /docs/content/error/ng/test.ngdoc: -------------------------------------------------------------------------------- 1 | @ngdoc error 2 | @name ng:test 3 | @fullName Testability Not Found 4 | @description 5 | 6 | AngularJS's testability helper, getTestability, requires a root element to be 7 | passed in. This helps differentiate between different AngularJS apps on the same 8 | page. This error is thrown when no injector is found for root element. It is 9 | often because the root element is outside of the ng-app. 10 | -------------------------------------------------------------------------------- /docs/content/error/ngModel/constexpr.ngdoc: -------------------------------------------------------------------------------- 1 | @ngdoc error 2 | @name ngModel:constexpr 3 | @fullName Non-Constant Expression 4 | @description 5 | 6 | Some attributes used in conjunction with ngModel (such as ngTrueValue or ngFalseValue) will only 7 | accept constant expressions. 8 | 9 | Examples using constant expressions include: 10 | 11 | ``` 12 | 13 | 14 | ``` 15 | 16 | Examples of non-constant expressions include: 17 | 18 | ``` 19 | 20 | 21 | ``` 22 | -------------------------------------------------------------------------------- /docs/content/error/ngModel/datefmt.ngdoc: -------------------------------------------------------------------------------- 1 | @ngdoc error 2 | @name ngModel:datefmt 3 | @fullName Model is not a date object 4 | @description 5 | 6 | All date-related inputs like `` require the model to be a `Date` object. 7 | If the model is something else, this error will be thrown. 8 | AngularJS does not set validation errors on the `` in this case 9 | as those errors are shown to the user, but the erroneous state was 10 | caused by incorrect application logic and not by the user. 11 | 12 | -------------------------------------------------------------------------------- /docs/content/error/ngModel/nonassign.ngdoc: -------------------------------------------------------------------------------- 1 | @ngdoc error 2 | @name ngModel:nonassign 3 | @fullName Non-Assignable Expression 4 | @description 5 | 6 | This error occurs when expression the {@link ng.directive:ngModel ngModel} directive is bound to is a non-assignable expression. 7 | 8 | Examples using assignable expressions include: 9 | 10 | ``` 11 | 12 | 13 | 14 | ``` 15 | 16 | Examples of non-assignable expressions include: 17 | 18 | ``` 19 | 20 | 21 | 22 | 23 | ``` 24 | 25 | Always make sure that the expression bound via `ngModel` directive can be assigned to. 26 | 27 | For more information, see the {@link ng.directive:ngModel ngModel API doc}. 28 | -------------------------------------------------------------------------------- /docs/content/error/ngModel/nopromise.ngdoc: -------------------------------------------------------------------------------- 1 | @ngdoc error 2 | @name ngModel:nopromise 3 | @fullName No promise 4 | @description 5 | 6 | The return value of an async validator, must always be a promise. If you want to return a 7 | non-promise value, you can convert it to a promise using {@link ng.$q#resolve `$q.resolve()`} or 8 | {@link ng.$q#reject `$q.reject()`}. 9 | 10 | Example: 11 | 12 | ``` 13 | .directive('asyncValidator', function($q) { 14 | return { 15 | require: 'ngModel', 16 | link: function(scope, elem, attrs, ngModel) { 17 | ngModel.$asyncValidators.myAsyncValidation = function(modelValue, viewValue) { 18 | if (/* I don't need to hit the backend API */) { 19 | return $q.resolve(); // to mark as valid or 20 | // return $q.reject(); // to mark as invalid 21 | } else { 22 | // ...send a request to the backend and return a promise 23 | } 24 | }; 25 | } 26 | }; 27 | }) 28 | ``` 29 | -------------------------------------------------------------------------------- /docs/content/error/ngOptions/iexp.ngdoc: -------------------------------------------------------------------------------- 1 | @ngdoc error 2 | @name ngOptions:iexp 3 | @fullName Invalid Expression 4 | @description 5 | This error occurs when 'ngOptions' is passed an expression that isn't in an expected form. 6 | 7 | Here's an example of correct syntax: 8 | 9 | ``` 10 |
    16 | date: {{input | date:"medium"}}
    17 | date: {{input | date:"longDate"}}
    18 | number: {{input | number}}
    19 | currency: {{input | currency }} 20 | 21 | 22 | -------------------------------------------------------------------------------- /i18n/e2e/localeTest_de.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | locale test 6 | 7 | 8 | 13 | 14 | 15 |
    16 | date: {{input | date:"medium"}}
    17 | date: {{input | date:"longDate"}}
    18 | number: {{input | number}}
    19 | currency: {{input | currency }} 20 | 21 | 22 | -------------------------------------------------------------------------------- /i18n/e2e/localeTest_es.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | locale test 6 | 7 | 8 | 13 | 14 | 15 |
    16 | date: {{input | date:"medium"}}
    17 | date: {{input | date:"longDate"}}
    18 | number: {{input | number}}
    19 | currency: {{input | currency }} 20 | 21 | 22 | -------------------------------------------------------------------------------- /i18n/e2e/localeTest_sk.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | locale test 6 | 7 | 8 | 14 | 15 | 16 |
    17 | date: {{input | date:"medium"}}
    18 | date: {{input | date:"longDate"}}
    19 | number: {{input | number}}
    20 | currency: {{input | currency }} 21 |
    22 |
    23 | 27 | 28 | 29 | 30 | -------------------------------------------------------------------------------- /i18n/e2e/runner.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | <AngularJS/> Docs Scenario Runner 7 | 8 | 9 | 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /i18n/generate.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | set -e 4 | 5 | BASE_DIR=`dirname $0` 6 | 7 | yarn run test-i18n 8 | 9 | node $BASE_DIR/src/closureSlurper.js 10 | 11 | yarn run test-i18n-ucd 12 | 13 | echo "Generating ngParseExt" 14 | node $BASE_DIR/ucd/src/extract.js 15 | 16 | -------------------------------------------------------------------------------- /i18n/spec/.eslintrc.json: -------------------------------------------------------------------------------- 1 | { 2 | "root": true, 3 | "extends": "../../.eslintrc-node.json", 4 | 5 | "env": { 6 | "jasmine": true 7 | } 8 | } 9 | -------------------------------------------------------------------------------- /i18n/src/.eslintrc.json: -------------------------------------------------------------------------------- 1 | { 2 | "root": true, 3 | "extends": "../../.eslintrc-node.json" 4 | } 5 | -------------------------------------------------------------------------------- /i18n/ucd/.eslintrc.json: -------------------------------------------------------------------------------- 1 | { 2 | "root": true, 3 | "extends": "../../.eslintrc-node.json" 4 | 5 | } 6 | -------------------------------------------------------------------------------- /i18n/ucd/spec/.eslintrc.json: -------------------------------------------------------------------------------- 1 | { 2 | "env": { 3 | "jasmine": true 4 | }, 5 | "rules": { 6 | "no-multi-str": "off" 7 | } 8 | } 9 | -------------------------------------------------------------------------------- /i18n/ucd/src/extract.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | 3 | var fs = require('fs'); 4 | var zlib = require('zlib'); 5 | var extractValues = require('./extractValues').extractValues; 6 | var generateCode = require('./generateCode').generateCode; 7 | // ID_Start and ID_Continue 8 | var propertiesToExtract = {'IDS': 'Y', 'IDC': 'Y'}; 9 | 10 | function main() { 11 | extractValues( 12 | fs.createReadStream(__dirname + '/ucd.all.flat.xml.gz').pipe(zlib.createGunzip()), 13 | propertiesToExtract, 14 | writeFile); 15 | 16 | function writeFile(validRanges) { 17 | var code = generateCode(validRanges); 18 | try { 19 | fs.lstatSync(__dirname + '/../../../src/ngParseExt'); 20 | } catch (e) { 21 | fs.mkdirSync(__dirname + '/../../../src/ngParseExt'); 22 | } 23 | fs.writeFileSync(__dirname + '/../../../src/ngParseExt/ucd.js', code); 24 | } 25 | } 26 | 27 | main(); 28 | -------------------------------------------------------------------------------- /i18n/ucd/src/ucd.all.flat.xml.gz: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/angular/angular.js/d8f77817eb5c98dec5317bc3756d1ea1812bcfbe/i18n/ucd/src/ucd.all.flat.xml.gz -------------------------------------------------------------------------------- /i18n/update-closure.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | set -e # Exit on error. 4 | 5 | BASE_DIR=`dirname $0` 6 | cd $BASE_DIR 7 | 8 | set -x # Trace commands as they're executed. 9 | 10 | I18N_BASE="https://raw.githubusercontent.com/google/closure-library/master/closure/goog/i18n" 11 | 12 | # use the github repo as it is more up to date than the svn repo 13 | curl "$I18N_BASE/currency.js" > closure/currencySymbols.js 14 | curl "$I18N_BASE/datetimesymbols.js" > closure/datetimeSymbols.js 15 | curl "$I18N_BASE/datetimesymbolsext.js" > closure/datetimeSymbolsExt.js 16 | curl "$I18N_BASE/numberformatsymbols.js" > closure/numberSymbols.js 17 | curl "$I18N_BASE/numberformatsymbolsext.js" > closure/numberSymbolsExt.js 18 | curl "$I18N_BASE/pluralrules.js" > closure/pluralRules.js 19 | -------------------------------------------------------------------------------- /images/css/arrow_left.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/angular/angular.js/d8f77817eb5c98dec5317bc3756d1ea1812bcfbe/images/css/arrow_left.gif -------------------------------------------------------------------------------- /images/css/arrow_right.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/angular/angular.js/d8f77817eb5c98dec5317bc3756d1ea1812bcfbe/images/css/arrow_right.gif -------------------------------------------------------------------------------- /images/css/indicator-wait.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/angular/angular.js/d8f77817eb5c98dec5317bc3756d1ea1812bcfbe/images/css/indicator-wait.png -------------------------------------------------------------------------------- /images/docs/Diagrams.graffle/image1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/angular/angular.js/d8f77817eb5c98dec5317bc3756d1ea1812bcfbe/images/docs/Diagrams.graffle/image1.png -------------------------------------------------------------------------------- /images/docs/Diagrams.graffle/image2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/angular/angular.js/d8f77817eb5c98dec5317bc3756d1ea1812bcfbe/images/docs/Diagrams.graffle/image2.png -------------------------------------------------------------------------------- /images/docs/Diagrams.graffle/image4.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/angular/angular.js/d8f77817eb5c98dec5317bc3756d1ea1812bcfbe/images/docs/Diagrams.graffle/image4.png -------------------------------------------------------------------------------- /images/docs/Diagrams.graffle/image8.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/angular/angular.js/d8f77817eb5c98dec5317bc3756d1ea1812bcfbe/images/docs/Diagrams.graffle/image8.png -------------------------------------------------------------------------------- /images/docs/Diagrams.graffle/image9.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/angular/angular.js/d8f77817eb5c98dec5317bc3756d1ea1812bcfbe/images/docs/Diagrams.graffle/image9.png -------------------------------------------------------------------------------- /images/docs/Diagrams.svg/image1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/angular/angular.js/d8f77817eb5c98dec5317bc3756d1ea1812bcfbe/images/docs/Diagrams.svg/image1.png -------------------------------------------------------------------------------- /images/docs/Diagrams.svg/image2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/angular/angular.js/d8f77817eb5c98dec5317bc3756d1ea1812bcfbe/images/docs/Diagrams.svg/image2.png -------------------------------------------------------------------------------- /images/docs/Diagrams.svg/image4.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/angular/angular.js/d8f77817eb5c98dec5317bc3756d1ea1812bcfbe/images/docs/Diagrams.svg/image4.png -------------------------------------------------------------------------------- /images/docs/Diagrams.svg/image8.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/angular/angular.js/d8f77817eb5c98dec5317bc3756d1ea1812bcfbe/images/docs/Diagrams.svg/image8.png -------------------------------------------------------------------------------- /images/docs/Diagrams.svg/image9.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/angular/angular.js/d8f77817eb5c98dec5317bc3756d1ea1812bcfbe/images/docs/Diagrams.svg/image9.png -------------------------------------------------------------------------------- /images/docs/guide/concepts.graffle/image1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/angular/angular.js/d8f77817eb5c98dec5317bc3756d1ea1812bcfbe/images/docs/guide/concepts.graffle/image1.png -------------------------------------------------------------------------------- /images/docs/guide/concepts.graffle/image4.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/angular/angular.js/d8f77817eb5c98dec5317bc3756d1ea1812bcfbe/images/docs/guide/concepts.graffle/image4.png -------------------------------------------------------------------------------- /images/docs/guide/concepts.graffle/image5.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/angular/angular.js/d8f77817eb5c98dec5317bc3756d1ea1812bcfbe/images/docs/guide/concepts.graffle/image5.png -------------------------------------------------------------------------------- /images/docs/guide/concepts.svg/filter.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | Produced by OmniGraffle 6.5.2 2013-11-06 19:46:59 +0000filter 4 | -------------------------------------------------------------------------------- /images/docs/guide/concepts.svg/image4.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/angular/angular.js/d8f77817eb5c98dec5317bc3756d1ea1812bcfbe/images/docs/guide/concepts.svg/image4.png -------------------------------------------------------------------------------- /images/docs/guide/concepts.svg/image5.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/angular/angular.js/d8f77817eb5c98dec5317bc3756d1ea1812bcfbe/images/docs/guide/concepts.svg/image5.png -------------------------------------------------------------------------------- /images/docs/guide/simple_scope.graffle/QuickLook/Preview.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/angular/angular.js/d8f77817eb5c98dec5317bc3756d1ea1812bcfbe/images/docs/guide/simple_scope.graffle/QuickLook/Preview.pdf -------------------------------------------------------------------------------- /images/docs/guide/simple_scope.graffle/QuickLook/Thumbnail.tiff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/angular/angular.js/d8f77817eb5c98dec5317bc3756d1ea1812bcfbe/images/docs/guide/simple_scope.graffle/QuickLook/Thumbnail.tiff -------------------------------------------------------------------------------- /images/docs/guide/simple_scope.graffle/image7.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/angular/angular.js/d8f77817eb5c98dec5317bc3756d1ea1812bcfbe/images/docs/guide/simple_scope.graffle/image7.png -------------------------------------------------------------------------------- /images/docs/guide/simple_scope.svg/image7.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/angular/angular.js/d8f77817eb5c98dec5317bc3756d1ea1812bcfbe/images/docs/guide/simple_scope.svg/image7.png -------------------------------------------------------------------------------- /images/docs/tutorial/simple_scope.graffle/QuickLook/Preview.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/angular/angular.js/d8f77817eb5c98dec5317bc3756d1ea1812bcfbe/images/docs/tutorial/simple_scope.graffle/QuickLook/Preview.pdf -------------------------------------------------------------------------------- /images/docs/tutorial/simple_scope.graffle/QuickLook/Thumbnail.tiff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/angular/angular.js/d8f77817eb5c98dec5317bc3756d1ea1812bcfbe/images/docs/tutorial/simple_scope.graffle/QuickLook/Thumbnail.tiff -------------------------------------------------------------------------------- /images/docs/tutorial/simple_scope.graffle/image7.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/angular/angular.js/d8f77817eb5c98dec5317bc3756d1ea1812bcfbe/images/docs/tutorial/simple_scope.graffle/image7.png -------------------------------------------------------------------------------- /images/docs/tutorial/simple_scope.svg/image7.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/angular/angular.js/d8f77817eb5c98dec5317bc3756d1ea1812bcfbe/images/docs/tutorial/simple_scope.svg/image7.png -------------------------------------------------------------------------------- /images/docs/tutorial/tutorial_02.graffle/QuickLook/Preview.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/angular/angular.js/d8f77817eb5c98dec5317bc3756d1ea1812bcfbe/images/docs/tutorial/tutorial_02.graffle/QuickLook/Preview.pdf -------------------------------------------------------------------------------- /images/docs/tutorial/tutorial_02.graffle/QuickLook/Thumbnail.tiff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/angular/angular.js/d8f77817eb5c98dec5317bc3756d1ea1812bcfbe/images/docs/tutorial/tutorial_02.graffle/QuickLook/Thumbnail.tiff -------------------------------------------------------------------------------- /images/docs/tutorial/tutorial_02.graffle/image11.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/angular/angular.js/d8f77817eb5c98dec5317bc3756d1ea1812bcfbe/images/docs/tutorial/tutorial_02.graffle/image11.png -------------------------------------------------------------------------------- /images/docs/tutorial/tutorial_02.svg/image11.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/angular/angular.js/d8f77817eb5c98dec5317bc3756d1ea1812bcfbe/images/docs/tutorial/tutorial_02.svg/image11.png -------------------------------------------------------------------------------- /images/docs/tutorial/tutorial_03.svg/image11.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/angular/angular.js/d8f77817eb5c98dec5317bc3756d1ea1812bcfbe/images/docs/tutorial/tutorial_03.svg/image11.png -------------------------------------------------------------------------------- /images/docs/tutorial/tutorial_05.graffle/QuickLook/Preview.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/angular/angular.js/d8f77817eb5c98dec5317bc3756d1ea1812bcfbe/images/docs/tutorial/tutorial_05.graffle/QuickLook/Preview.pdf -------------------------------------------------------------------------------- /images/docs/tutorial/tutorial_05.graffle/QuickLook/Thumbnail.tiff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/angular/angular.js/d8f77817eb5c98dec5317bc3756d1ea1812bcfbe/images/docs/tutorial/tutorial_05.graffle/QuickLook/Thumbnail.tiff -------------------------------------------------------------------------------- /images/docs/tutorial/tutorial_05.graffle/image13.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/angular/angular.js/d8f77817eb5c98dec5317bc3756d1ea1812bcfbe/images/docs/tutorial/tutorial_05.graffle/image13.png -------------------------------------------------------------------------------- /images/docs/tutorial/tutorial_05.svg/image13.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/angular/angular.js/d8f77817eb5c98dec5317bc3756d1ea1812bcfbe/images/docs/tutorial/tutorial_05.svg/image13.png -------------------------------------------------------------------------------- /images/docs/tutorial/tutorial_06.graffle/QuickLook/Preview.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/angular/angular.js/d8f77817eb5c98dec5317bc3756d1ea1812bcfbe/images/docs/tutorial/tutorial_06.graffle/QuickLook/Preview.pdf -------------------------------------------------------------------------------- /images/docs/tutorial/tutorial_06.graffle/QuickLook/Thumbnail.tiff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/angular/angular.js/d8f77817eb5c98dec5317bc3756d1ea1812bcfbe/images/docs/tutorial/tutorial_06.graffle/QuickLook/Thumbnail.tiff -------------------------------------------------------------------------------- /images/docs/tutorial/tutorial_06.graffle/image15.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/angular/angular.js/d8f77817eb5c98dec5317bc3756d1ea1812bcfbe/images/docs/tutorial/tutorial_06.graffle/image15.png -------------------------------------------------------------------------------- /images/docs/tutorial/tutorial_06.svg/image15.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/angular/angular.js/d8f77817eb5c98dec5317bc3756d1ea1812bcfbe/images/docs/tutorial/tutorial_06.svg/image15.png -------------------------------------------------------------------------------- /images/docs/tutorial/tutorial_09.graffle/QuickLook/Preview.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/angular/angular.js/d8f77817eb5c98dec5317bc3756d1ea1812bcfbe/images/docs/tutorial/tutorial_09.graffle/QuickLook/Preview.pdf -------------------------------------------------------------------------------- /images/docs/tutorial/tutorial_09.graffle/QuickLook/Thumbnail.tiff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/angular/angular.js/d8f77817eb5c98dec5317bc3756d1ea1812bcfbe/images/docs/tutorial/tutorial_09.graffle/QuickLook/Thumbnail.tiff -------------------------------------------------------------------------------- /images/docs/tutorial/tutorial_09.graffle/image9.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/angular/angular.js/d8f77817eb5c98dec5317bc3756d1ea1812bcfbe/images/docs/tutorial/tutorial_09.graffle/image9.png -------------------------------------------------------------------------------- /images/docs/tutorial/tutorial_09.svg/image9.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/angular/angular.js/d8f77817eb5c98dec5317bc3756d1ea1812bcfbe/images/docs/tutorial/tutorial_09.svg/image9.png -------------------------------------------------------------------------------- /images/docs/tutorial/tutorial_10.graffle/QuickLook/Preview.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/angular/angular.js/d8f77817eb5c98dec5317bc3756d1ea1812bcfbe/images/docs/tutorial/tutorial_10.graffle/QuickLook/Preview.pdf -------------------------------------------------------------------------------- /images/docs/tutorial/tutorial_10.graffle/QuickLook/Thumbnail.tiff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/angular/angular.js/d8f77817eb5c98dec5317bc3756d1ea1812bcfbe/images/docs/tutorial/tutorial_10.graffle/QuickLook/Thumbnail.tiff -------------------------------------------------------------------------------- /images/docs/tutorial/tutorial_10.graffle/image10.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/angular/angular.js/d8f77817eb5c98dec5317bc3756d1ea1812bcfbe/images/docs/tutorial/tutorial_10.graffle/image10.png -------------------------------------------------------------------------------- /images/docs/tutorial/tutorial_10.svg/image10.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/angular/angular.js/d8f77817eb5c98dec5317bc3756d1ea1812bcfbe/images/docs/tutorial/tutorial_10.svg/image10.png -------------------------------------------------------------------------------- /images/docs/tutorial/tutorial_12.graffle/QuickLook/Preview.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/angular/angular.js/d8f77817eb5c98dec5317bc3756d1ea1812bcfbe/images/docs/tutorial/tutorial_12.graffle/QuickLook/Preview.pdf -------------------------------------------------------------------------------- /images/docs/tutorial/tutorial_12.graffle/QuickLook/Thumbnail.tiff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/angular/angular.js/d8f77817eb5c98dec5317bc3756d1ea1812bcfbe/images/docs/tutorial/tutorial_12.graffle/QuickLook/Thumbnail.tiff -------------------------------------------------------------------------------- /images/docs/tutorial/tutorial_12.graffle/image10.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/angular/angular.js/d8f77817eb5c98dec5317bc3756d1ea1812bcfbe/images/docs/tutorial/tutorial_12.graffle/image10.png -------------------------------------------------------------------------------- /images/docs/tutorial/tutorial_12.svg/image10.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/angular/angular.js/d8f77817eb5c98dec5317bc3756d1ea1812bcfbe/images/docs/tutorial/tutorial_12.svg/image10.png -------------------------------------------------------------------------------- /images/docs/tutorial/tutorial_proto.graffle/QuickLook/Preview.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/angular/angular.js/d8f77817eb5c98dec5317bc3756d1ea1812bcfbe/images/docs/tutorial/tutorial_proto.graffle/QuickLook/Preview.pdf -------------------------------------------------------------------------------- /images/docs/tutorial/tutorial_proto.graffle/QuickLook/Thumbnail.tiff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/angular/angular.js/d8f77817eb5c98dec5317bc3756d1ea1812bcfbe/images/docs/tutorial/tutorial_proto.graffle/QuickLook/Thumbnail.tiff -------------------------------------------------------------------------------- /images/docs/tutorial/tutorial_proto.graffle/image7.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/angular/angular.js/d8f77817eb5c98dec5317bc3756d1ea1812bcfbe/images/docs/tutorial/tutorial_proto.graffle/image7.png -------------------------------------------------------------------------------- /images/docs/tutorial/tutorial_proto.svg/image7.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/angular/angular.js/d8f77817eb5c98dec5317bc3756d1ea1812bcfbe/images/docs/tutorial/tutorial_proto.svg/image7.png -------------------------------------------------------------------------------- /images/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/angular/angular.js/d8f77817eb5c98dec5317bc3756d1ea1812bcfbe/images/favicon.ico -------------------------------------------------------------------------------- /images/logo/AngularJS-Shield.exports/AngularJS-Shield-huge.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/angular/angular.js/d8f77817eb5c98dec5317bc3756d1ea1812bcfbe/images/logo/AngularJS-Shield.exports/AngularJS-Shield-huge.png -------------------------------------------------------------------------------- /images/logo/AngularJS-Shield.exports/AngularJS-Shield-large.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/angular/angular.js/d8f77817eb5c98dec5317bc3756d1ea1812bcfbe/images/logo/AngularJS-Shield.exports/AngularJS-Shield-large.png -------------------------------------------------------------------------------- /images/logo/AngularJS-Shield.exports/AngularJS-Shield-medium.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/angular/angular.js/d8f77817eb5c98dec5317bc3756d1ea1812bcfbe/images/logo/AngularJS-Shield.exports/AngularJS-Shield-medium.png -------------------------------------------------------------------------------- /images/logo/AngularJS-Shield.exports/AngularJS-Shield-small.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/angular/angular.js/d8f77817eb5c98dec5317bc3756d1ea1812bcfbe/images/logo/AngularJS-Shield.exports/AngularJS-Shield-small.png -------------------------------------------------------------------------------- /images/logo/AngularJS-Shield.exports/AngularJS-Shield.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/angular/angular.js/d8f77817eb5c98dec5317bc3756d1ea1812bcfbe/images/logo/AngularJS-Shield.exports/AngularJS-Shield.pdf -------------------------------------------------------------------------------- /images/logo/AngularJS.exports/AngularJS-huge.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/angular/angular.js/d8f77817eb5c98dec5317bc3756d1ea1812bcfbe/images/logo/AngularJS.exports/AngularJS-huge.png -------------------------------------------------------------------------------- /images/logo/AngularJS.exports/AngularJS-large.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/angular/angular.js/d8f77817eb5c98dec5317bc3756d1ea1812bcfbe/images/logo/AngularJS.exports/AngularJS-large.png -------------------------------------------------------------------------------- /images/logo/AngularJS.exports/AngularJS-medium.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/angular/angular.js/d8f77817eb5c98dec5317bc3756d1ea1812bcfbe/images/logo/AngularJS.exports/AngularJS-medium.png -------------------------------------------------------------------------------- /images/logo/AngularJS.exports/AngularJS-small.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/angular/angular.js/d8f77817eb5c98dec5317bc3756d1ea1812bcfbe/images/logo/AngularJS.exports/AngularJS-small.png -------------------------------------------------------------------------------- /images/logo/AngularJS.exports/AngularJS.eps: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/angular/angular.js/d8f77817eb5c98dec5317bc3756d1ea1812bcfbe/images/logo/AngularJS.exports/AngularJS.eps -------------------------------------------------------------------------------- /images/logo/AngularJS.exports/AngularJS.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/angular/angular.js/d8f77817eb5c98dec5317bc3756d1ea1812bcfbe/images/logo/AngularJS.exports/AngularJS.pdf -------------------------------------------------------------------------------- /images/logo/AngularJS.graffle/data.plist: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/angular/angular.js/d8f77817eb5c98dec5317bc3756d1ea1812bcfbe/images/logo/AngularJS.graffle/data.plist -------------------------------------------------------------------------------- /images/logo/AngularJS.graffle/image1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/angular/angular.js/d8f77817eb5c98dec5317bc3756d1ea1812bcfbe/images/logo/AngularJS.graffle/image1.png -------------------------------------------------------------------------------- /images/logo/AngularJS.graffle/image2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/angular/angular.js/d8f77817eb5c98dec5317bc3756d1ea1812bcfbe/images/logo/AngularJS.graffle/image2.png -------------------------------------------------------------------------------- /karma-docs.conf.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | 3 | var sharedConfig = require('./karma-shared.conf'); 4 | 5 | module.exports = function(config) { 6 | sharedConfig(config, {testName: 'AngularJS: docs', logFile: 'karma-docs.log'}); 7 | 8 | config.set({ 9 | files: [ 10 | 'build/angular.js', 11 | 'build/angular-mocks.js', 12 | 'docs/app/src/**/*.js', 13 | 'docs/app/test/**/*Spec.js' 14 | ], 15 | 16 | junitReporter: { 17 | outputFile: 'test_out/docs.xml', 18 | suite: 'Docs' 19 | } 20 | }); 21 | }; 22 | -------------------------------------------------------------------------------- /karma-jqlite.conf.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | 3 | var angularFiles = require('./angularFiles'); 4 | var sharedConfig = require('./karma-shared.conf'); 5 | 6 | module.exports = function(config) { 7 | sharedConfig(config, {testName: 'AngularJS: jqLite', logFile: 'karma-jqlite.log'}); 8 | 9 | config.set({ 10 | files: angularFiles.mergeFilesFor('karma'), 11 | exclude: angularFiles.mergeFilesFor('karmaExclude'), 12 | 13 | junitReporter: { 14 | outputFile: 'test_out/jqlite.xml', 15 | suite: 'jqLite' 16 | } 17 | }); 18 | }; 19 | -------------------------------------------------------------------------------- /karma-jquery-2.1.conf.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | 3 | var karmaConfigFactory = require('./karma-jquery.conf-factory'); 4 | 5 | module.exports = karmaConfigFactory('2.1'); 6 | -------------------------------------------------------------------------------- /karma-jquery-2.2.conf.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | 3 | var karmaConfigFactory = require('./karma-jquery.conf-factory'); 4 | 5 | module.exports = karmaConfigFactory('2.2'); 6 | -------------------------------------------------------------------------------- /karma-jquery.conf-factory.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | 3 | var angularFiles = require('./angularFiles'); 4 | var sharedConfig = require('./karma-shared.conf'); 5 | 6 | module.exports = function(version) { 7 | version = version || ''; 8 | 9 | return function(config) { 10 | sharedConfig(config, { 11 | testName: 'AngularJS: jQuery' + (version ? ' ' + version : ''), 12 | logFile: 'karma-jquery' + version + '.log' 13 | }); 14 | 15 | config.set({ 16 | files: angularFiles.mergeFilesFor('karmaJquery' + version), 17 | exclude: angularFiles.mergeFilesFor('karmaJqueryExclude'), 18 | 19 | junitReporter: { 20 | outputFile: 'test_out/jquery.xml', 21 | suite: 'jQuery' 22 | } 23 | }); 24 | }; 25 | }; 26 | -------------------------------------------------------------------------------- /karma-jquery.conf.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | 3 | var karmaConfigFactory = require('./karma-jquery.conf-factory'); 4 | 5 | module.exports = karmaConfigFactory(); 6 | -------------------------------------------------------------------------------- /karma-modules-ngAnimate.conf.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | 3 | var angularFiles = require('./angularFiles'); 4 | var sharedConfig = require('./karma-shared.conf'); 5 | 6 | module.exports = function(config) { 7 | sharedConfig(config, {testName: 'AngularJS: isolated module tests (ngAnimate)', logFile: 'karma-ngAnimate-isolated.log'}); 8 | 9 | config.set({ 10 | files: angularFiles.mergeFilesFor('karmaModules-ngAnimate') 11 | }); 12 | }; 13 | -------------------------------------------------------------------------------- /karma-modules-ngMock.conf.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | 3 | var angularFiles = require('./angularFiles'); 4 | var sharedConfig = require('./karma-shared.conf'); 5 | 6 | module.exports = function(config) { 7 | sharedConfig(config, {testName: 'AngularJS: isolated module tests (ngMock)', logFile: 'karma-ngMock-isolated.log'}); 8 | 9 | config.set({ 10 | files: angularFiles.mergeFilesFor('karmaModules-ngMock') 11 | }); 12 | }; 13 | -------------------------------------------------------------------------------- /karma-modules.conf.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | 3 | var sharedConfig = require('./karma-shared.conf'); 4 | 5 | module.exports = function(config) { 6 | sharedConfig(config, {testName: 'AngularJS: isolated module tests', logFile: 'karma-modules-isolated.log'}); 7 | 8 | config.set({ 9 | files: [ 10 | 'build/angular.js', 11 | 'build/angular-mocks.js', 12 | 'test/modules/no_bootstrap.js', 13 | 'test/helpers/matchers.js', 14 | 'test/helpers/privateMocks.js', 15 | 'test/helpers/support.js', 16 | 'test/helpers/testabilityPatch.js', 17 | 'build/test-bundles/angular-*.js' 18 | ] 19 | }); 20 | }; 21 | -------------------------------------------------------------------------------- /logs/.gitignore: -------------------------------------------------------------------------------- 1 | * 2 | !.gitignore 3 | -------------------------------------------------------------------------------- /protractor-conf.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | 3 | var config = require('./protractor-shared-conf').config; 4 | 5 | config.specs = [ 6 | 'test/e2e/tests/**/*.js', 7 | 'build/docs/ptore2e/**/*.js', 8 | 'docs/app/e2e/**/*.scenario.js' 9 | ]; 10 | 11 | config.capabilities.browserName = 'chrome'; 12 | 13 | config.directConnect = true; 14 | 15 | exports.config = config; 16 | -------------------------------------------------------------------------------- /protractor-shared-conf.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | 3 | exports.config = { 4 | allScriptsTimeout: 11000, 5 | 6 | baseUrl: 'http://localhost:8000/', 7 | 8 | framework: 'jasmine2', 9 | 10 | capabilities: { 11 | // Fix element scrolling behavior in Firefox for fixed header elements (like angularjs.org has) 12 | 'elementScrollBehavior': 1 13 | }, 14 | 15 | onPrepare: function() { 16 | /* global angular: false, browser: false, jasmine: false */ 17 | 18 | // Disable animations so e2e tests run more quickly 19 | var disableNgAnimate = function() { 20 | angular.module('disableNgAnimate', []).run(['$animate', function($animate) { 21 | $animate.enabled(false); 22 | }]); 23 | }; 24 | 25 | browser.addMockModule('disableNgAnimate', disableNgAnimate); 26 | 27 | // Store the name of the browser that's currently being used. 28 | browser.getCapabilities().then(function(caps) { 29 | browser.params.browser = caps.get('browserName'); 30 | }); 31 | }, 32 | 33 | jasmineNodeOpts: { 34 | defaultTimeoutInterval: 60000, 35 | showTiming: true 36 | } 37 | }; 38 | -------------------------------------------------------------------------------- /scripts/angular.js/tag-release.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | # Tags a release 4 | 5 | echo "#################################" 6 | echo "## Tag angular.js for a release #" 7 | echo "#################################" 8 | 9 | ARG_DEFS=( 10 | "--action=(prepare|publish)" 11 | "--commit-sha=(.*)" 12 | # the version number of the release. 13 | # e.g. 1.2.12 or 1.2.12-rc.1 14 | "--version-number=([0-9]+\.[0-9]+\.[0-9]+(-[a-z]+\.[0-9]+)?)" 15 | "--version-name=(.+)" 16 | ) 17 | 18 | function checkVersionNumber() { 19 | BRANCH_PATTERN=$(readJsonProp "package.json" "branchPattern") 20 | if [[ $VERSION_NUMBER != $BRANCH_PATTERN ]]; then 21 | echo "version-number needs to match $BRANCH_PATTERN on this branch" 22 | usage 23 | fi 24 | } 25 | 26 | function init { 27 | cd ../.. 28 | checkVersionNumber 29 | TAG_NAME="v$VERSION_NUMBER" 30 | } 31 | 32 | function prepare() { 33 | git tag "$TAG_NAME" -m "chore(release): $TAG_NAME codename($VERSION_NAME)" "$COMMIT_SHA" 34 | } 35 | 36 | function publish() { 37 | # push the tag to github 38 | git push origin $TAG_NAME 39 | } 40 | 41 | source $(dirname $0)/../utils.inc 42 | -------------------------------------------------------------------------------- /scripts/bower/repos.inc: -------------------------------------------------------------------------------- 1 | #!/bin/false 2 | # -*- mode: sh; -*- vim: set filetype=sh: 3 | 4 | REPOS=( 5 | angular 6 | angular-animate 7 | angular-aria 8 | angular-cookies 9 | angular-i18n 10 | angular-loader 11 | angular-message-format 12 | angular-messages 13 | angular-mocks 14 | angular-parse-ext 15 | angular-resource 16 | angular-route 17 | angular-sanitize 18 | angular-scenario 19 | angular-touch 20 | ) 21 | -------------------------------------------------------------------------------- /scripts/check-size.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | grunt minify 4 | gzip -c < build/angular.min.js > build/angular.min.js.gzip 5 | ls -l build/angular.min.* 6 | -------------------------------------------------------------------------------- /scripts/code.angularjs.org-firebase/.eslintrc.json: -------------------------------------------------------------------------------- 1 | { 2 | "env": { 3 | "es6": true 4 | } 5 | } 6 | -------------------------------------------------------------------------------- /scripts/code.angularjs.org-firebase/.firebaserc: -------------------------------------------------------------------------------- 1 | { 2 | "projects": { 3 | "default": "code-angularjs-org-338b8" 4 | } 5 | } 6 | -------------------------------------------------------------------------------- /scripts/code.angularjs.org-firebase/firebase.json: -------------------------------------------------------------------------------- 1 | { 2 | "hosting": { 3 | "public": "public", 4 | "trailingSlash": false, 5 | "redirects": [ 6 | { 7 | "source": "/:version/docs", 8 | "destination": "/:version/docs/index.html", 9 | "type": 301 10 | } 11 | ], 12 | "rewrites": [ 13 | { 14 | "source": "/**", 15 | "function": "sendStoredFile" 16 | } 17 | ] 18 | }, 19 | "storage": { 20 | "rules": "storage.rules" 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /scripts/code.angularjs.org-firebase/functions/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "functions-firebase-code.angularjs.org", 3 | "description": "Cloud Functions to serve files from gcs to code.angularjs.org", 4 | "engines": { 5 | "node": "14" 6 | }, 7 | "dependencies": { 8 | "@google-cloud/storage": "^5.8.5", 9 | "firebase-admin": "^9.9.0", 10 | "firebase-functions": "^3.14.1" 11 | }, 12 | "private": true 13 | } 14 | -------------------------------------------------------------------------------- /scripts/code.angularjs.org-firebase/public/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/angular/angular.js/d8f77817eb5c98dec5317bc3756d1ea1812bcfbe/scripts/code.angularjs.org-firebase/public/favicon.ico -------------------------------------------------------------------------------- /scripts/code.angularjs.org-firebase/public/googleb96cceae5888d79f.html: -------------------------------------------------------------------------------- 1 | google-site-verification: googleb96cceae5888d79f.html -------------------------------------------------------------------------------- /scripts/code.angularjs.org-firebase/public/robots.txt: -------------------------------------------------------------------------------- 1 | User-agent: * 2 | 3 | Disallow: /*docs*/ 4 | Disallow: /*i18n/ 5 | Disallow: /*.zip$ 6 | Allow: /snapshot/docs/js/all-versions-data.js 7 | -------------------------------------------------------------------------------- /scripts/code.angularjs.org-firebase/readme.firebase.code.md: -------------------------------------------------------------------------------- 1 | Firebase for code.angularjs.org 2 | =============================== 3 | 4 | This folder contains the Google Firebase scripts for the `code.angularjs.org` setup. 5 | 6 | `firebase.json` contains the rewrite rules that route every subdirectory request to the cloud function in `functions/index.js` that serves the docs from the Firebase Google Cloud Storage bucket. 7 | 8 | `functions/index.js` also contains a rule that deletes outdated build zip files from the snapshot and snapshot-stable folders when new zip files are uploaded. 9 | 10 | See `/scripts/docs.angularjs.org-firebase/readme.firebase.code.md` for the Firebase deployment to `docs.angularjs.org`. 11 | 12 | # Continuous integration 13 | 14 | The code is deployed to Google Firebase hosting and functions as well as to the Google Cloud Storage bucket automatically via CI. 15 | See `.circleci/config.yml` for the complete deployment config and build steps. 16 | -------------------------------------------------------------------------------- /scripts/code.angularjs.org-firebase/storage.rules: -------------------------------------------------------------------------------- 1 | service firebase.storage { 2 | match /b/{bucket}/o { 3 | match /{allPaths=**} { 4 | allow read, write: if request.auth!=null; 5 | } 6 | } 7 | } 8 | -------------------------------------------------------------------------------- /scripts/docs.angularjs.org-firebase/.firebaserc: -------------------------------------------------------------------------------- 1 | { 2 | "projects": { 3 | "default": "docs-angularjs-org-9p2" 4 | } 5 | } 6 | -------------------------------------------------------------------------------- /scripts/docs.angularjs.org-firebase/firebase.json: -------------------------------------------------------------------------------- 1 | { 2 | "hosting": { 3 | "public": "deploy", 4 | "redirects": [ 5 | { 6 | "source": "/error/:namespace\\::error*", 7 | "destination": "/error/:namespace/:error*", 8 | "type": 302 9 | } 10 | ], 11 | "rewrites": [ 12 | { 13 | "source": "**/*!(.@(jpg|jpeg|gif|png|html|js|map|json|css|svg|ttf|txt|woff|woff2|eot|xml))", 14 | "function": "sendFile" 15 | } 16 | ], 17 | "headers": [ 18 | { 19 | "source": "/examples/**.csp/*.html", 20 | "headers": [{ 21 | "key": "Content-Security-Policy", 22 | "value": "default-src 'self'" 23 | }] 24 | }, 25 | { 26 | "source": "/Error404.html", 27 | "headers" : [{ 28 | "key" : "X-Robots-Tag", 29 | "value" : "noindex" 30 | }] 31 | }, 32 | { 33 | "source": "/@(partials|examples)/**", 34 | "headers" : [{ 35 | "key" : "X-Robots-Tag", 36 | "value" : "noindex" 37 | }] 38 | } 39 | ] 40 | } 41 | } 42 | -------------------------------------------------------------------------------- /scripts/docs.angularjs.org-firebase/functions/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "functions", 3 | "description": "Cloud Functions for Firebase", 4 | "engines": { 5 | "node": "14" 6 | }, 7 | "scripts": { 8 | "lint": "eslint .", 9 | "serve": "firebase emulators:start --only functions", 10 | "shell": "firebase functions:shell", 11 | "start": "npm run shell", 12 | "deploy": "firebase deploy --only functions", 13 | "logs": "firebase functions:log" 14 | }, 15 | "dependencies": { 16 | "firebase-admin": "^9.9.0", 17 | "firebase-functions": "^3.14.1" 18 | }, 19 | "devDependencies": { 20 | "eslint": "^7.28.0", 21 | "eslint-plugin-promise": "^5.1.0" 22 | }, 23 | "private": true 24 | } 25 | -------------------------------------------------------------------------------- /scripts/errors.angularjs.org-firebase/.firebaserc: -------------------------------------------------------------------------------- 1 | { 2 | "projects": { 3 | "default": "errors-angularjs-org" 4 | } 5 | } 6 | -------------------------------------------------------------------------------- /scripts/errors.angularjs.org-firebase/firebase.json: -------------------------------------------------------------------------------- 1 | { 2 | "hosting": { 3 | "public": "public", 4 | "ignore": [ 5 | "firebase.json", 6 | "**/.*", 7 | "**/node_modules/**" 8 | ], 9 | "redirects": [ 10 | { 11 | "source": "/:version/:namespace\\::error*", 12 | "destination": "https://code.angularjs.org/:version/docs/error/:namespace/:error*", 13 | "type": 301 14 | }, 15 | { 16 | "source": "/:version/:error*", 17 | "destination": "https://code.angularjs.org/:version/docs/error/:error*", 18 | "type": 301 19 | }, 20 | { 21 | "source": "/", 22 | "destination": "https://docs.angularjs.org/error/", 23 | "type": 301 24 | } 25 | ] 26 | } 27 | } 28 | -------------------------------------------------------------------------------- /src/angular.bind.js: -------------------------------------------------------------------------------- 1 | if (window.angular.bootstrap) { 2 | // AngularJS is already loaded, so we can return here... 3 | if (window.console) { 4 | console.log('WARNING: Tried to load AngularJS more than once.'); 5 | } 6 | return; 7 | } 8 | 9 | // try to bind to jquery now so that one can write jqLite(fn) 10 | // but we will rebind on bootstrap again. 11 | bindJQuery(); 12 | -------------------------------------------------------------------------------- /src/angular.prefix: -------------------------------------------------------------------------------- 1 | /** 2 | * @license AngularJS v"NG_VERSION_FULL" 3 | * (c) 2010-2020 Google LLC. http://angularjs.org 4 | * License: MIT 5 | */ 6 | (function(window) { 7 | -------------------------------------------------------------------------------- /src/angular.suffix: -------------------------------------------------------------------------------- 1 | jqLite(function() { 2 | angularInit(window.document, bootstrap); 3 | }); 4 | 5 | })(window); 6 | -------------------------------------------------------------------------------- /src/loader.suffix: -------------------------------------------------------------------------------- 1 | setupModuleLoader(window); 2 | })(window); 3 | 4 | /** 5 | * Closure compiler type information 6 | * 7 | * @typedef { { 8 | * requires: !Array., 9 | * invokeQueue: !Array.>, 10 | * 11 | * service: function(string, Function):angular.Module, 12 | * factory: function(string, Function):angular.Module, 13 | * value: function(string, *):angular.Module, 14 | * 15 | * filter: function(string, Function):angular.Module, 16 | * 17 | * init: function(Function):angular.Module 18 | * } } 19 | */ 20 | angular.Module; 21 | 22 | -------------------------------------------------------------------------------- /src/module.prefix: -------------------------------------------------------------------------------- 1 | /** 2 | * @license AngularJS v"NG_VERSION_FULL" 3 | * (c) 2010-2020 Google LLC. http://angularjs.org 4 | * License: MIT 5 | */ 6 | (function(window, angular) { 7 | -------------------------------------------------------------------------------- /src/module.suffix: -------------------------------------------------------------------------------- 1 | 2 | })(window, window.angular); 3 | -------------------------------------------------------------------------------- /src/ng/directive/directives.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | 3 | function ngDirective(directive) { 4 | if (isFunction(directive)) { 5 | directive = { 6 | link: directive 7 | }; 8 | } 9 | directive.restrict = directive.restrict || 'AC'; 10 | return valueFn(directive); 11 | } 12 | -------------------------------------------------------------------------------- /src/ng/forceReflow.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | 3 | var $$ForceReflowProvider = /** @this */ function() { 4 | this.$get = ['$document', function($document) { 5 | return function(domNode) { 6 | //the line below will force the browser to perform a repaint so 7 | //that all the animated elements within the animation frame will 8 | //be properly updated and drawn on screen. This is required to 9 | //ensure that the preparation animation is properly flushed so that 10 | //the active state picks up from there. DO NOT REMOVE THIS LINE. 11 | //DO NOT OPTIMIZE THIS LINE. THE MINIFIER WILL REMOVE IT OTHERWISE WHICH 12 | //WILL RESULT IN AN UNPREDICTABLE BUG THAT IS VERY HARD TO TRACK DOWN AND 13 | //WILL TAKE YEARS AWAY FROM YOUR LIFE. 14 | if (domNode) { 15 | if (!domNode.nodeType && domNode instanceof jqLite) { 16 | domNode = domNode[0]; 17 | } 18 | } else { 19 | domNode = $document[0].body; 20 | } 21 | return domNode.offsetWidth + 1; 22 | }; 23 | }]; 24 | }; 25 | -------------------------------------------------------------------------------- /src/ng/locale.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | 3 | /** 4 | * @ngdoc service 5 | * @name $locale 6 | * 7 | * @description 8 | * $locale service provides localization rules for various AngularJS components. As of right now the 9 | * only public api is: 10 | * 11 | * * `id` – `{string}` – locale id formatted as `languageId-countryId` (e.g. `en-us`) 12 | */ 13 | 14 | -------------------------------------------------------------------------------- /src/ng/raf.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | 3 | /** @this */ 4 | function $$RAFProvider() { //rAF 5 | this.$get = ['$window', '$timeout', function($window, $timeout) { 6 | var requestAnimationFrame = $window.requestAnimationFrame || 7 | $window.webkitRequestAnimationFrame; 8 | 9 | var cancelAnimationFrame = $window.cancelAnimationFrame || 10 | $window.webkitCancelAnimationFrame || 11 | $window.webkitCancelRequestAnimationFrame; 12 | 13 | var rafSupported = !!requestAnimationFrame; 14 | var raf = rafSupported 15 | ? function(fn) { 16 | var id = requestAnimationFrame(fn); 17 | return function() { 18 | cancelAnimationFrame(id); 19 | }; 20 | } 21 | : function(fn) { 22 | var timer = $timeout(fn, 16.66, false); // 1000 / 60 = 16.666 23 | return function() { 24 | $timeout.cancel(timer); 25 | }; 26 | }; 27 | 28 | raf.supported = rafSupported; 29 | 30 | return raf; 31 | }]; 32 | } 33 | -------------------------------------------------------------------------------- /src/ng/rootElement.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | 3 | /** 4 | * @ngdoc service 5 | * @name $rootElement 6 | * 7 | * @description 8 | * The root element of AngularJS application. This is either the element where {@link 9 | * ng.directive:ngApp ngApp} was declared or the element passed into 10 | * {@link angular.bootstrap}. The element represents the root element of application. It is also the 11 | * location where the application's {@link auto.$injector $injector} service gets 12 | * published, and can be retrieved using `$rootElement.injector()`. 13 | */ 14 | 15 | 16 | // the implementation is in angular.bootstrap 17 | -------------------------------------------------------------------------------- /src/ngLocale/.eslintrc.json: -------------------------------------------------------------------------------- 1 | { 2 | "rules": { 3 | /* locale files are generated from a 3rd party library so they don't adhere to all the rules */ 4 | "block-spacing": "off", 5 | "eqeqeq": "off", 6 | "max-len": "off", 7 | "no-bitwise": "off", 8 | "no-multi-spaces": "off", 9 | "quotes": "off" 10 | } 11 | } 12 | -------------------------------------------------------------------------------- /src/ngMessageFormat/.eslintrc.json: -------------------------------------------------------------------------------- 1 | { 2 | "globals": { 3 | "goog": false // see src/module_closure.prefix 4 | } 5 | } 6 | -------------------------------------------------------------------------------- /src/ngMock/.eslintrc.json: -------------------------------------------------------------------------------- 1 | { 2 | "globals": { 3 | "expect": false, 4 | "jQuery": false 5 | } 6 | } 7 | -------------------------------------------------------------------------------- /src/ngRoute/.eslintrc.json: -------------------------------------------------------------------------------- 1 | { 2 | "globals": { 3 | "ngRouteModule": false 4 | } 5 | } 6 | -------------------------------------------------------------------------------- /src/ngSanitize/.eslintrc.json: -------------------------------------------------------------------------------- 1 | { 2 | "globals": { 3 | "sanitizeText": false 4 | } 5 | } 6 | -------------------------------------------------------------------------------- /src/ngTouch/.eslintrc.json: -------------------------------------------------------------------------------- 1 | { 2 | "globals": { 3 | "ngTouch": false 4 | } 5 | } 6 | -------------------------------------------------------------------------------- /src/ngTouch/touch.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | 3 | /** 4 | * @ngdoc module 5 | * @name ngTouch 6 | * @description 7 | * 8 | * The `ngTouch` module provides helpers for touch-enabled devices. 9 | * The implementation is based on jQuery Mobile touch event handling 10 | * ([jquerymobile.com](http://jquerymobile.com/)). * 11 | * 12 | * See {@link ngTouch.$swipe `$swipe`} for usage. 13 | * 14 | * @deprecated 15 | * sinceVersion="1.7.0" 16 | * The ngTouch module with the {@link ngTouch.$swipe `$swipe`} service and 17 | * the {@link ngTouch.ngSwipeLeft} and {@link ngTouch.ngSwipeRight} directives are 18 | * deprecated. Instead, stand-alone libraries for touch handling and gesture interaction 19 | * should be used, for example [HammerJS](https://hammerjs.github.io/) (which is also used by 20 | * Angular). 21 | */ 22 | 23 | // define ngTouch module 24 | /* global ngTouch */ 25 | var ngTouch = angular.module('ngTouch', []); 26 | 27 | ngTouch.info({ angularVersion: '"NG_VERSION_FULL"' }); 28 | 29 | function nodeName_(element) { 30 | return angular.$$lowercase(element.nodeName || (element[0] && element[0].nodeName)); 31 | } 32 | -------------------------------------------------------------------------------- /src/publishExternalApis.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | 3 | publishExternalAPI(angular); 4 | -------------------------------------------------------------------------------- /src/shallowCopy.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | 3 | /* global shallowCopy: true */ 4 | 5 | /** 6 | * Creates a shallow copy of an object, an array or a primitive. 7 | * 8 | * Assumes that there are no proto properties for objects. 9 | */ 10 | function shallowCopy(src, dst) { 11 | if (isArray(src)) { 12 | dst = dst || []; 13 | 14 | for (var i = 0, ii = src.length; i < ii; i++) { 15 | dst[i] = src[i]; 16 | } 17 | } else if (isObject(src)) { 18 | dst = dst || {}; 19 | 20 | for (var key in src) { 21 | if (!(key.charAt(0) === '$' && key.charAt(1) === '$')) { 22 | dst[key] = src[key]; 23 | } 24 | } 25 | } 26 | 27 | return dst || src; 28 | } 29 | -------------------------------------------------------------------------------- /test/e2e/fixtures/.eslintrc.json: -------------------------------------------------------------------------------- 1 | { 2 | "root": true, 3 | "extends": "../../../.eslintrc-browser.json", 4 | 5 | "globals": { 6 | "jQuery": false, 7 | "$": false 8 | } 9 | } 10 | -------------------------------------------------------------------------------- /test/e2e/fixtures/anchor-scroll-y-offset/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 |
    5 | 8 |
    9 |
    10 | Anchor {{y}} of 5 11 |
    12 | 13 | 34 | 35 | 36 | 37 | 38 | 39 | -------------------------------------------------------------------------------- /test/e2e/fixtures/anchor-scroll-y-offset/script.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | 3 | angular. 4 | module('test', []). 5 | controller('TestController', function($anchorScroll, $location, $scope) { 6 | $anchorScroll.yOffset = 50; 7 | 8 | $scope.scrollTo = function(target) { 9 | if ($location.hash() !== target) { 10 | // Set `$location.hash()` to `target` and 11 | // `$anchorScroll` will detect the change and scroll 12 | $location.hash(target); 13 | } else { 14 | // The hash is the same, but `target` might be out of view - 15 | // explicitly call `$anchorScroll` 16 | $anchorScroll(); 17 | } 18 | }; 19 | }); 20 | -------------------------------------------------------------------------------- /test/e2e/fixtures/anchor-scroll/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 8 | 9 | 19 | 20 | 21 | 22 | 23 | 24 | -------------------------------------------------------------------------------- /test/e2e/fixtures/anchor-scroll/script.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | 3 | angular. 4 | module('test', []). 5 | controller('TestController', function($anchorScroll, $location, $scope) { 6 | $scope.scrollTo = function(target) { 7 | // Set `$location.hash()` to `target` and 8 | // `$anchorScroll` will detect the change and scroll 9 | $location.hash(target); 10 | }; 11 | }); 12 | -------------------------------------------------------------------------------- /test/e2e/fixtures/angularjs-already-loaded/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 |
    5 |

    {{text}}

    6 |
    7 | 8 | 9 | 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /test/e2e/fixtures/angularjs-already-loaded/script.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | 3 | angular. 4 | module('test', []). 5 | controller('TestController', function($scope) { 6 | $scope.text = 'Hello, world!'; 7 | }); 8 | -------------------------------------------------------------------------------- /test/e2e/fixtures/back2dom/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 |
    5 | 6 | 7 | 8 | 9 |
    10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /test/e2e/fixtures/back2dom/script.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | 3 | angular 4 | .module('test', []) 5 | .run(function($rootScope) { 6 | $rootScope.internalFnCalled = false; 7 | 8 | $rootScope.internalFn = function() { 9 | $rootScope.internalFnCalled = true; 10 | }; 11 | }); 12 | -------------------------------------------------------------------------------- /test/e2e/fixtures/base-tag/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | -------------------------------------------------------------------------------- /test/e2e/fixtures/base-tag/script.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | 3 | angular. 4 | module('test', []). 5 | run(function($sce) { 6 | window.isTrustedUrl = function(url) { 7 | try { 8 | $sce.getTrustedResourceUrl(url); 9 | } catch (e) { 10 | return false; 11 | } 12 | return true; 13 | }; 14 | }); 15 | -------------------------------------------------------------------------------- /test/e2e/fixtures/directive-require-html/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 |
    5 | 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /test/e2e/fixtures/directive-require-html/script.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | 3 | angular. 4 | module('test', []). 5 | provider('$exceptionHandler', /** @this */ function() { 6 | this.$get = [function() { 7 | return function(error) { 8 | window.document.querySelector('#container').textContent = error && error.message; 9 | }; 10 | }]; 11 | }). 12 | 13 | directive('requireDirective', function() { 14 | return { 15 | require: '^^requireTargetDirective', 16 | link: function(scope, element, attrs, ctrl) { 17 | window.document.querySelector('#container').textContent = ctrl.content; 18 | } 19 | }; 20 | }). 21 | directive('requireTargetDirective', function() { 22 | return { 23 | controller: function() { 24 | this.content = 'requiredContent'; 25 | } 26 | }; 27 | }); 28 | 29 | -------------------------------------------------------------------------------- /test/e2e/fixtures/http/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 |
    5 |

    {{text}}

    6 |
    7 | 8 | 9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /test/e2e/fixtures/http/script.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | 3 | angular. 4 | module('test', []). 5 | config(function($httpProvider) { 6 | $httpProvider.interceptors.push(function($q) { 7 | return { 8 | request: function(config) { 9 | return $q(function(resolve) { 10 | window.setTimeout(resolve, 100, config); 11 | }); 12 | }, 13 | response: function(response) { 14 | return $q(function(resolve) { 15 | window.setTimeout(resolve, 100, response); 16 | }); 17 | } 18 | }; 19 | }); 20 | }). 21 | controller('TestController', function($cacheFactory, $http, $scope) { 22 | var url = '/some/url'; 23 | 24 | var cache = $cacheFactory('test'); 25 | cache.put(url, 'Hello, world!'); 26 | 27 | $http. 28 | get(url, {cache: cache}). 29 | then(function(response) { $scope.text = response.data; }); 30 | }); 31 | -------------------------------------------------------------------------------- /test/e2e/fixtures/input-hidden/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 |
    5 | 6 | 7 |
    8 | 9 | 10 | -------------------------------------------------------------------------------- /test/e2e/fixtures/loader/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 |
    5 |

    {{text}}

    6 |
    7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | -------------------------------------------------------------------------------- /test/e2e/fixtures/loader/script.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | 3 | angular. 4 | module('test', [ 5 | 'ngTouch', 6 | 'ngSanitize', 7 | 'ngRoute', 8 | 'ngResource', 9 | 'ngParseExt', 10 | 'ngMessages', 11 | 'ngMessageFormat', 12 | 'ngCookies', 13 | 'ngAria', 14 | 'ngAnimate' 15 | ]). 16 | controller('TestController', function($scope) { 17 | $scope.text = 'Hello, world!'; 18 | }); 19 | -------------------------------------------------------------------------------- /test/e2e/fixtures/ng-jq-jquery/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | {{jqueryVersion}} 5 | 6 | 7 | 10 | 11 | 12 | 13 | 14 | 15 | -------------------------------------------------------------------------------- /test/e2e/fixtures/ng-jq-jquery/script.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | 3 | angular. 4 | module('test', []). 5 | run(function($rootScope) { 6 | $rootScope.jqueryVersion = window.angular.element().jquery || 'jqLite'; 7 | }); 8 | -------------------------------------------------------------------------------- /test/e2e/fixtures/ng-jq/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | {{jqueryVersion}} 5 | 6 | 7 | 12 | 13 | 14 | 15 | 16 | -------------------------------------------------------------------------------- /test/e2e/fixtures/ng-jq/script.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | 3 | angular. 4 | module('test', []). 5 | run(function($rootScope) { 6 | $rootScope.jqueryVersion = window.angular.element().jquery || 'jqLite'; 7 | }); 8 | -------------------------------------------------------------------------------- /test/e2e/fixtures/ng-route-promise/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 |
    4 | 5 | 6 | 7 | 8 | 9 | 10 | -------------------------------------------------------------------------------- /test/e2e/fixtures/ready/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | {{beforeReady}} 5 | {{afterReady}} 6 | {{afterReadySync}} 7 | {{afterReadyMethod}} 8 | {{afterReadyMethodSync}} 9 | 10 | 11 |
    This div is loaded after scripts.
    12 | 13 | 14 | -------------------------------------------------------------------------------- /test/e2e/fixtures/ready/script.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | 3 | var beforeReady; 4 | (function() { 5 | var divAfterScripts = window.document.getElementById('div-after-scripts'); 6 | beforeReady = divAfterScripts && divAfterScripts.textContent; 7 | })(); 8 | 9 | var afterReady; 10 | angular.element(function() { 11 | var divAfterScripts = window.document.getElementById('div-after-scripts'); 12 | afterReady = divAfterScripts && divAfterScripts.textContent; 13 | }); 14 | 15 | var afterReadyMethod; 16 | angular.element(window.document).ready(function() { 17 | var divAfterScripts = window.document.getElementById('div-after-scripts'); 18 | afterReadyMethod = divAfterScripts && divAfterScripts.textContent; 19 | }); 20 | 21 | var afterReadySync = afterReady; 22 | var afterReadyMethodSync = afterReadyMethod; 23 | 24 | angular 25 | .module('test', []) 26 | .run(function($rootScope) { 27 | $rootScope.beforeReady = beforeReady; 28 | $rootScope.afterReady = afterReady; 29 | $rootScope.afterReadySync = afterReadySync; 30 | $rootScope.afterReadyMethod = afterReadyMethod; 31 | $rootScope.afterReadyMethodSync = afterReadyMethodSync; 32 | }); 33 | -------------------------------------------------------------------------------- /test/e2e/fixtures/sample/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 |
    5 |

    {{text}}

    6 |
    7 | 8 | 9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /test/e2e/fixtures/sample/script.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | 3 | angular. 4 | module('test', []). 5 | controller('TestController', function($scope) { 6 | $scope.text = 'Hello, world!'; 7 | }); 8 | -------------------------------------------------------------------------------- /test/e2e/fixtures/version/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | -------------------------------------------------------------------------------- /test/e2e/tests/.eslintrc.json: -------------------------------------------------------------------------------- 1 | { 2 | "root": true, 3 | "extends": "../../../.eslintrc-node.json", 4 | 5 | "env": { 6 | "jasmine": true, 7 | "protractor": true 8 | }, 9 | 10 | "globals": { 11 | "loadFixture": false 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /test/e2e/tests/angularjs-already-loaded.spec.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | 3 | describe('App where AngularJS is loaded more than once', function() { 4 | beforeEach(function() { 5 | loadFixture('angularjs-already-loaded'); 6 | }); 7 | 8 | it('should have the interpolated text', function() { 9 | expect(element(by.binding('text')).getText()).toBe('Hello, world!'); 10 | }); 11 | }); 12 | -------------------------------------------------------------------------------- /test/e2e/tests/directive-require-html.spec.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | 3 | describe('require parent controller on html element', function() { 4 | it('should not use the html element as the parent element', function() { 5 | 6 | loadFixture('directive-require-html'); 7 | 8 | expect(element(by.id('container')).getText()).toContain('Controller \'requireTargetDirective\', required by directive \'requireDirective\', can\'t be found!'); 9 | }); 10 | }); 11 | -------------------------------------------------------------------------------- /test/e2e/tests/helpers/main.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | 3 | var helper = { 4 | loadFixture: function(fixture) { 5 | var i = 0; 6 | while (fixture[i] === '/') ++i; 7 | fixture = fixture.slice(i); 8 | if (!/\/(index\.html)?$/.test(fixture)) { 9 | fixture += '/'; 10 | } 11 | 12 | if (process.env.USE_JQUERY) { 13 | fixture += '?jquery'; 14 | } 15 | 16 | browser.get('/e2e/fixtures/' + fixture); 17 | return helper; 18 | } 19 | }; 20 | 21 | global.test = helper; 22 | global.loadFixture = helper.loadFixture; 23 | -------------------------------------------------------------------------------- /test/e2e/tests/http.spec.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | 3 | describe('$http', function() { 4 | beforeEach(function() { 5 | loadFixture('http'); 6 | }); 7 | 8 | it('should correctly update the outstanding request count', function() { 9 | expect(element(by.binding('text')).getText()).toBe('Hello, world!'); 10 | }); 11 | }); 12 | -------------------------------------------------------------------------------- /test/e2e/tests/loader.spec.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | 3 | describe('angular-loader', function() { 4 | beforeEach(function() { 5 | loadFixture('loader'); 6 | }); 7 | 8 | it('should not be broken by loading the modules before core', function() { 9 | expect(element(by.binding('text')).getText()).toBe('Hello, world!'); 10 | }); 11 | }); 12 | -------------------------------------------------------------------------------- /test/e2e/tests/ng-jq.spec.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | 3 | describe('Customizing the jqLite / jQuery version', function() { 4 | it('should be able to force jqLite', function() { 5 | loadFixture('ng-jq'); 6 | expect(element(by.binding('jqueryVersion')).getText()).toBe('jqLite'); 7 | }); 8 | 9 | it('should be able to use a specific version jQuery', function() { 10 | loadFixture('ng-jq-jquery'); 11 | expect(element(by.binding('jqueryVersion')).getText()).toBe('2.1.0'); 12 | }); 13 | }); 14 | -------------------------------------------------------------------------------- /test/e2e/tests/ng-route-promise.spec.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | 3 | describe('ngRoute promises', function() { 4 | beforeEach(function() { 5 | loadFixture('ng-route-promise'); 6 | }); 7 | 8 | it('should wait for route promises', function() { 9 | expect(element.all(by.tagName('li')).count()).toBe(5); 10 | }); 11 | 12 | it('should time out if the promise takes long enough', function(done) { 13 | // Don't try this at home kids, I'm a protractor dev 14 | browser.manage().timeouts().setScriptTimeout(1000); 15 | browser.waitForAngular().then(function() { 16 | fail('waitForAngular() should have timed out, but didn\'t'); 17 | }, done); 18 | }); 19 | 20 | it('should wait for route promises when navigating to another route', function() { 21 | browser.setLocation('/foo2'); 22 | expect(element(by.tagName('body')).getText()).toBe('5'); 23 | }); 24 | 25 | afterEach(function(done) { 26 | // Restore old timeout limit 27 | browser.getProcessedConfig().then(function(config) { 28 | return browser.manage().timeouts().setScriptTimeout(config.allScriptsTimeout); 29 | }).then(done); 30 | }); 31 | }); 32 | -------------------------------------------------------------------------------- /test/e2e/tests/ready.spec.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | 3 | describe('Firing a callback on ready', function() { 4 | it('should not have the div available immediately', function() { 5 | loadFixture('ready'); 6 | expect(element(by.className('before-ready')).getText()) 7 | .toBe(''); 8 | }); 9 | 10 | it('should wait for document ready', function() { 11 | loadFixture('ready'); 12 | expect(element(by.className('after-ready')).getText()) 13 | .toBe('This div is loaded after scripts.'); 14 | expect(element(by.className('after-ready-method')).getText()) 15 | .toBe('This div is loaded after scripts.'); 16 | }); 17 | 18 | it('should be asynchronous', function() { 19 | loadFixture('ready'); 20 | expect(element(by.className('after-ready-sync')).getText()) 21 | .toBe(''); 22 | expect(element(by.className('after-ready-method-sync')).getText()) 23 | .toBe(''); 24 | }); 25 | }); 26 | -------------------------------------------------------------------------------- /test/e2e/tests/sample.spec.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | 3 | // Sample E2E test: 4 | describe('Sample', function() { 5 | beforeEach(function() { 6 | loadFixture('sample'); 7 | }); 8 | 9 | it('should have the interpolated text', function() { 10 | expect(element(by.binding('text')).getText()).toBe('Hello, world!'); 11 | }); 12 | 13 | it('should insert the ng-cloak styles', function() { 14 | browser.executeScript(` 15 | var span = document.createElement('span'); 16 | span.className = 'ng-cloak foo'; 17 | document.body.appendChild(span); 18 | `); 19 | expect(element(by.className('foo')).isDisplayed()).toBe(false); 20 | }); 21 | }); 22 | -------------------------------------------------------------------------------- /test/e2e/tools/.eslintrc.json: -------------------------------------------------------------------------------- 1 | { 2 | "root": true, 3 | "extends": "../../../.eslintrc-node.json" 4 | } 5 | -------------------------------------------------------------------------------- /test/e2e/tools/index.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | 3 | module.exports = { 4 | middleware: require('./middleware') 5 | }; 6 | -------------------------------------------------------------------------------- /test/e2e/tools/util.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | 3 | var fs = require('fs'); 4 | var path = require('path'); 5 | 6 | var root = path.resolve(__dirname, '..'); 7 | var tests = path.resolve(root, 'fixtures'); 8 | 9 | function stat(path) { 10 | try { 11 | return fs.statSync(path); 12 | } catch (e) { 13 | // Ignore ENOENT. 14 | if (e.code !== 'ENOENT') { 15 | throw e; 16 | } 17 | } 18 | } 19 | 20 | function testExists(testname) { 21 | var s = stat(path.resolve(tests, testname)); 22 | return s && s.isDirectory(); 23 | } 24 | 25 | function rewriteTestFile(testname, testfile) { 26 | if (testfile.search(/^https?:\/\//) === 0) { 27 | return testfile; 28 | } 29 | 30 | var i = 0; 31 | while (testfile[i] === '/') ++i; 32 | testfile = testfile.slice(i); 33 | var s = stat(path.resolve(tests, testname, testfile)); 34 | if (s && (s.isFile() || s.isDirectory())) { 35 | return ['/test/e2e/fixtures', testname, testfile].join('/'); 36 | } 37 | return false; 38 | } 39 | 40 | module.exports = { 41 | stat: stat, 42 | testExists: testExists, 43 | rewriteTestFile: rewriteTestFile 44 | }; 45 | -------------------------------------------------------------------------------- /test/helpers/support.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | 3 | var supportTests = { 4 | classes: '/^class\\b/.test((class C {}).toString())', 5 | fatArrows: 'a => a', 6 | shorthandMethods: '({ fn(x) { return; } })' 7 | }; 8 | 9 | var support = {}; 10 | 11 | for (var prop in supportTests) { 12 | if (supportTests.hasOwnProperty(prop)) { 13 | try { 14 | // eslint-disable-next-line no-eval 15 | support[prop] = !!eval(supportTests[prop]); 16 | } catch (e) { 17 | support[prop] = false; 18 | } 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /test/jquery_alias.js: -------------------------------------------------------------------------------- 1 | /* global _jQuery: true, _jqLiteMode: true */ 2 | 'use strict'; 3 | 4 | var _jQuery = jQuery, 5 | _jqLiteMode = false; 6 | -------------------------------------------------------------------------------- /test/jquery_remove.js: -------------------------------------------------------------------------------- 1 | /* global _jQuery: true, _jqLiteMode: true */ 2 | 'use strict'; 3 | 4 | var _jQuery = jQuery.noConflict(true), 5 | _jqLiteMode = true; 6 | -------------------------------------------------------------------------------- /test/modules/no_bootstrap.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | 3 | // When running the modules test, then the page should not be bootstrapped. 4 | window.name = 'NG_DEFER_BOOTSTRAP!'; 5 | -------------------------------------------------------------------------------- /test/ng/directive/ngClickSpec.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | 3 | describe('ngClick', function() { 4 | var element; 5 | 6 | afterEach(function() { 7 | dealoc(element); 8 | }); 9 | 10 | it('should get called on a click', inject(function($rootScope, $compile) { 11 | element = $compile('
    ')($rootScope); 12 | $rootScope.$digest(); 13 | expect($rootScope.clicked).toBeFalsy(); 14 | 15 | browserTrigger(element, 'click'); 16 | expect($rootScope.clicked).toEqual(true); 17 | })); 18 | 19 | it('should pass event object', inject(function($rootScope, $compile) { 20 | element = $compile('
    ')($rootScope); 21 | $rootScope.$digest(); 22 | 23 | browserTrigger(element, 'click'); 24 | expect($rootScope.event).toBeDefined(); 25 | })); 26 | }); 27 | -------------------------------------------------------------------------------- /test/ng/exceptionHandlerSpec.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | 3 | describe('$exceptionHandler', function() { 4 | /* global $ExceptionHandlerProvider:false */ 5 | it('should log errors with single argument', function() { 6 | module(function($provide) { 7 | $provide.provider('$exceptionHandler', $ExceptionHandlerProvider); 8 | }); 9 | inject(function($log, $exceptionHandler) { 10 | $exceptionHandler('myError'); 11 | expect($log.error.logs.shift()).toEqual(['myError']); 12 | }); 13 | }); 14 | 15 | 16 | it('should log errors with multiple arguments', function() { 17 | module(function($provide) { 18 | $provide.provider('$exceptionHandler', $ExceptionHandlerProvider); 19 | }); 20 | inject(function($log, $exceptionHandler) { 21 | $exceptionHandler('myError', 'comment'); 22 | expect($log.error.logs.shift()).toEqual(['myError', 'comment']); 23 | }); 24 | }); 25 | }); 26 | -------------------------------------------------------------------------------- /test/ng/rootElementSpec.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | 3 | describe('$rootElement', function() { 4 | it('should publish the bootstrap element into $rootElement', function() { 5 | var element = jqLite('
    '); 6 | var injector = angular.bootstrap(element); 7 | 8 | expect(injector.get('$rootElement')[0]).toBe(element[0]); 9 | 10 | dealoc(element); 11 | }); 12 | }); 13 | -------------------------------------------------------------------------------- /test/ng/windowSpec.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | 3 | describe('$window', function() { 4 | it('should inject $window', inject(function($window) { 5 | expect($window).toBe(window); 6 | })); 7 | 8 | it('should be able to mock $window without errors', function() { 9 | module({$window: {}}); 10 | inject(['$sce', angular.noop]); 11 | }); 12 | }); 13 | -------------------------------------------------------------------------------- /test/ngAnimate/.eslintrc.json: -------------------------------------------------------------------------------- 1 | { 2 | "rules": { 3 | "new-cap": "off" 4 | }, 5 | "globals": { 6 | "getDomNode": false, 7 | "helpers": false, 8 | "mergeAnimationDetails": false, 9 | "prepareAnimationOptions": false, 10 | "applyAnimationStyles": false, 11 | "applyAnimationFromStyles": false, 12 | "applyAnimationToStyles": false, 13 | "applyAnimationClassesFactory": false, 14 | "TRANSITIONEND_EVENT": false, 15 | "TRANSITION_PROP": false, 16 | "ANIMATION_PROP": false, 17 | "ANIMATIONEND_EVENT": false, 18 | "ANIMATE_TIMER_KEY": false 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /test/ngSanitize/directive/ngBindHtmlSpec.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | 3 | 4 | describe('ngBindHtml', function() { 5 | beforeEach(module('ngSanitize')); 6 | 7 | it('should set html', inject(function($rootScope, $compile) { 8 | var element = $compile('
    ')($rootScope); 9 | $rootScope.html = '
    hello
    '; 10 | $rootScope.$digest(); 11 | expect(lowercase(element.html())).toEqual('
    hello
    '); 12 | })); 13 | 14 | 15 | it('should reset html when value is null or undefined', inject(function($compile, $rootScope) { 16 | var element = $compile('
    ')($rootScope); 17 | 18 | angular.forEach([null, undefined, ''], function(val) { 19 | $rootScope.html = 'some val'; 20 | $rootScope.$digest(); 21 | expect(lowercase(element.html())).toEqual('some val'); 22 | 23 | $rootScope.html = val; 24 | $rootScope.$digest(); 25 | expect(lowercase(element.html())).toEqual(''); 26 | }); 27 | })); 28 | }); 29 | -------------------------------------------------------------------------------- /vendor/README.md: -------------------------------------------------------------------------------- 1 | # Vendor Libraries 2 | 3 | Libraries that are not available via yarn / the npm registry, are checked into git in the `vendor` 4 | folder. 5 | 6 | Currently this affects the following libraries: 7 | 8 | ## closure-compiler 9 | 10 | Version: `20140814` 11 | 12 | The closure-compiler is available on npm, but not the version we are using. 13 | 14 | ## ng-closure-runner 15 | 16 | Version: `0.2.4` 17 | 18 | This project has never been published to npm. 19 | 20 | # Updating the libraries 21 | 22 | If a different version becomes available, it must be manually downloaded and replaced in the 23 | repository. 24 | 25 | Should yarn support requiring zip archives in the future (see 26 | [yarn github issue: Zip support](https://github.com/yarnpkg/yarn/issues/1483)), 27 | we can remove the libraries from the repository and add them to the package.json. 28 | -------------------------------------------------------------------------------- /vendor/closure-compiler/compiler.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/angular/angular.js/d8f77817eb5c98dec5317bc3756d1ea1812bcfbe/vendor/closure-compiler/compiler.jar -------------------------------------------------------------------------------- /vendor/ng-closure-runner/ngcompiler.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/angular/angular.js/d8f77817eb5c98dec5317bc3756d1ea1812bcfbe/vendor/ng-closure-runner/ngcompiler.jar --------------------------------------------------------------------------------