├── .gitignore
├── .travis.yml
├── CHANGELOG.md
├── CONTRIBUTING.md
├── Gruntfile.js
├── LICENSE
├── README.md
├── angularFiles.js
├── changelog.js
├── changelog.spec.js
├── changelog.tmp.md
├── check-size.sh
├── css
├── angular-scenario.css
└── angular.css
├── docs
├── content
│ ├── api
│ │ ├── index.ngdoc
│ │ └── ng.ngdoc
│ ├── cookbook
│ │ ├── advancedform.ngdoc
│ │ ├── buzz.ngdoc
│ │ ├── deeplinking.ngdoc
│ │ ├── form.ngdoc
│ │ ├── helloworld.ngdoc
│ │ ├── index.ngdoc
│ │ └── mvc.ngdoc
│ ├── guide
│ │ ├── bootstrap.ngdoc
│ │ ├── compiler.ngdoc
│ │ ├── concepts.ngdoc
│ │ ├── dev_guide.e2e-testing.ngdoc
│ │ ├── dev_guide.mvc.ngdoc
│ │ ├── dev_guide.mvc.understanding_controller.ngdoc
│ │ ├── dev_guide.mvc.understanding_model.ngdoc
│ │ ├── dev_guide.mvc.understanding_view.ngdoc
│ │ ├── dev_guide.services.$location.ngdoc
│ │ ├── dev_guide.services.creating_services.ngdoc
│ │ ├── dev_guide.services.injecting_controllers.ngdoc
│ │ ├── dev_guide.services.managing_dependencies.ngdoc
│ │ ├── dev_guide.services.ngdoc
│ │ ├── dev_guide.services.testing_services.ngdoc
│ │ ├── dev_guide.services.understanding_services.ngdoc
│ │ ├── dev_guide.templates.css-styling.ngdoc
│ │ ├── dev_guide.templates.databinding.ngdoc
│ │ ├── dev_guide.templates.filters.creating_filters.ngdoc
│ │ ├── dev_guide.templates.filters.ngdoc
│ │ ├── dev_guide.templates.filters.using_filters.ngdoc
│ │ ├── dev_guide.templates.ngdoc
│ │ ├── dev_guide.unit-testing.ngdoc
│ │ ├── di.ngdoc
│ │ ├── directive.ngdoc
│ │ ├── expression.ngdoc
│ │ ├── forms.ngdoc
│ │ ├── i18n.ngdoc
│ │ ├── ie.ngdoc
│ │ ├── index.ngdoc
│ │ ├── introduction.ngdoc
│ │ ├── module.ngdoc
│ │ ├── overview.ngdoc
│ │ ├── scope.ngdoc
│ │ └── type.ngdoc
│ ├── misc
│ │ ├── contribute.ngdoc
│ │ ├── downloading.ngdoc
│ │ ├── faq.ngdoc
│ │ └── started.ngdoc
│ └── 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
│ │ └── the_end.ngdoc
├── img
│ ├── AngularJS-small.png
│ ├── One_Way_Data_Binding.png
│ ├── Two_Way_Data_Binding.png
│ ├── angular_parts.png
│ ├── bullet.png
│ ├── form_data_flow.png
│ ├── glyphicons-halflings-white.png
│ ├── glyphicons-halflings.png
│ ├── guide
│ │ ├── about_model_final.png
│ │ ├── about_view_final.png
│ │ ├── concepts-controller.png
│ │ ├── concepts-directive.png
│ │ ├── concepts-model.png
│ │ ├── concepts-module-injector.png
│ │ ├── concepts-runtime.png
│ │ ├── concepts-scope.png
│ │ ├── concepts-startup.png
│ │ ├── concepts-view.png
│ │ ├── di_sequence_final.png
│ │ ├── dom_scope_final.png
│ │ ├── hashbang_vs_regular_url.jpg
│ │ ├── scenario_runner.png
│ │ └── simple_scope_final.png
│ ├── helloworld.png
│ ├── helloworld_2way.png
│ └── tutorial
│ │ ├── catalog_screen.png
│ │ ├── tutorial_00.png
│ │ ├── tutorial_00_final.png
│ │ ├── tutorial_02.png
│ │ ├── tutorial_03.png
│ │ ├── tutorial_04.png
│ │ ├── tutorial_07_final.png
│ │ ├── tutorial_08-09_final.png
│ │ ├── tutorial_10-11_final.png
│ │ └── xhr_service_final.png
├── spec
│ ├── domSpec.js
│ ├── ngdocSpec.js
│ ├── sitemapSpec.js
│ ├── specs.js
│ └── writerSpec.js
└── src
│ ├── SiteMap.js
│ ├── appCache.js
│ ├── dom.js
│ ├── example.js
│ ├── gen-docs.js
│ ├── ignore.words
│ ├── ngdoc.js
│ ├── reader.js
│ ├── templates
│ ├── .htaccess
│ ├── css
│ │ ├── bootstrap.min.css
│ │ ├── doc_widgets.css
│ │ ├── docs.css
│ │ └── font-awesome.css
│ ├── docs-scenario.html
│ ├── favicon.ico
│ ├── font
│ │ ├── fontawesome-webfont.eot
│ │ ├── fontawesome-webfont.svg
│ │ ├── fontawesome-webfont.svgz
│ │ ├── fontawesome-webfont.ttf
│ │ └── fontawesome-webfont.woff
│ ├── index.html
│ ├── js
│ │ ├── docs.js
│ │ ├── jquery.js
│ │ └── jquery.min.js
│ └── offline.html
│ └── writer.js
├── example
├── buzz
│ ├── buzz.css
│ ├── buzz.html
│ └── buzz.js
├── index.html
├── personalLog
│ ├── personalLog.html
│ ├── personalLog.js
│ ├── scenario
│ │ ├── personalLogScenario.js
│ │ └── runner.html
│ └── test
│ │ └── personalLogSpec.js
├── temp.html
├── tweeter
│ ├── style.css
│ ├── tweeter_addressbook.html
│ ├── tweeter_demo.html
│ └── tweeterclient.js
├── view1.html
└── view2.html
├── gdocs.js
├── gen_docs.sh
├── i18n
├── README.md
├── closure
│ ├── currencySymbols.js
│ ├── datetimeSymbolsExt.js
│ ├── datetimesymbols.js
│ ├── numberSymbols.js
│ └── pluralRules.js
├── e2e
│ ├── 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
├── run-tests.sh
├── spec
│ ├── closureI18nExtractorSpec.js
│ ├── converterSpec.js
│ ├── parserSpec.js
│ └── utilSpec.js
├── src
│ ├── closureI18nExtractor.js
│ ├── closureSlurper.js
│ ├── converter.js
│ ├── parser.js
│ └── util.js
└── update-closure.sh
├── images
├── css
│ ├── arrow_left.gif
│ ├── arrow_right.gif
│ └── indicator-wait.png
├── docs
│ ├── Diagrams.graffle
│ │ ├── QuickLook
│ │ │ ├── Preview.pdf
│ │ │ └── Thumbnail.tiff
│ │ ├── data.plist
│ │ ├── image1.png
│ │ ├── image2.png
│ │ ├── image4.png
│ │ ├── image8.png
│ │ └── image9.png
│ ├── guide
│ │ ├── about_controller.graffle
│ │ ├── about_model.graffle
│ │ ├── about_view.graffle
│ │ │ ├── QuickLook
│ │ │ │ ├── Preview.pdf
│ │ │ │ └── Thumbnail.tiff
│ │ │ ├── data.plist
│ │ │ └── image3.png
│ │ ├── concepts.graffle
│ │ │ ├── data.plist
│ │ │ ├── image1.png
│ │ │ ├── image4.png
│ │ │ └── image5.png
│ │ ├── di_sequence.graffle
│ │ ├── dom_scope.graffle
│ │ ├── form_data_flow.graffle
│ │ ├── hashbang_vs_regular_url.graffle
│ │ └── simple_scope.graffle
│ │ │ ├── QuickLook
│ │ │ ├── Preview.pdf
│ │ │ └── Thumbnail.tiff
│ │ │ ├── data.plist
│ │ │ └── image7.png
│ └── tutorial
│ │ ├── di_sequence.graffle
│ │ ├── simple_scope.graffle
│ │ ├── QuickLook
│ │ │ ├── Preview.pdf
│ │ │ └── Thumbnail.tiff
│ │ ├── data.plist
│ │ └── image7.png
│ │ ├── tutorial_00.graffle
│ │ ├── tutorial_02.graffle
│ │ ├── QuickLook
│ │ │ ├── Preview.pdf
│ │ │ └── Thumbnail.tiff
│ │ ├── data.plist
│ │ └── image11.png
│ │ ├── tutorial_03.graffle
│ │ ├── QuickLook
│ │ │ ├── Preview.pdf
│ │ │ └── Thumbnail.tiff
│ │ ├── data.plist
│ │ └── image13.png
│ │ ├── tutorial_04.graffle
│ │ ├── QuickLook
│ │ │ ├── Preview.pdf
│ │ │ └── Thumbnail.tiff
│ │ ├── data.plist
│ │ └── image15.png
│ │ ├── tutorial_07.graffle
│ │ ├── QuickLook
│ │ │ ├── Preview.pdf
│ │ │ └── Thumbnail.tiff
│ │ ├── data.plist
│ │ └── image9.png
│ │ ├── tutorial_08-09.graffle
│ │ ├── QuickLook
│ │ │ ├── Preview.pdf
│ │ │ └── Thumbnail.tiff
│ │ ├── data.plist
│ │ └── image10.png
│ │ ├── tutorial_10-11.graffle
│ │ ├── QuickLook
│ │ │ ├── Preview.pdf
│ │ │ └── Thumbnail.tiff
│ │ ├── data.plist
│ │ └── image10.png
│ │ ├── tutorial_proto.graffle
│ │ ├── QuickLook
│ │ │ ├── Preview.pdf
│ │ │ └── Thumbnail.tiff
│ │ ├── data.plist
│ │ └── image7.png
│ │ └── xhr_service.graffle
├── 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
├── init-repo.sh
├── lib
├── closure-compiler
│ ├── COPYING
│ ├── README
│ ├── compiler.jar
│ └── version.txt
├── grunt
│ ├── plugins.js
│ └── utils.js
├── htmlparser
│ └── htmlparser.js
├── jquery
│ ├── jquery.js
│ ├── jquery.min.js
│ └── version.txt
└── showdown
│ ├── index.js
│ └── showdown-0.9.js
├── logs
└── .gitignore
├── package.json
├── release-commit.sh
├── src
├── Angular.js
├── AngularPublic.js
├── angular-bootstrap.js
├── angular.prefix
├── angular.suffix
├── apis.js
├── auto
│ └── injector.js
├── bootstrap
│ ├── bootstrap-prettify.js
│ ├── bootstrap.js
│ ├── css
│ │ └── bootstrap.css
│ └── google-prettify
│ │ ├── prettify.css
│ │ └── prettify.js
├── jqLite.js
├── loader.js
├── loader.prefix
├── loader.suffix
├── module.prefix
├── module.suffix
├── ng
│ ├── anchorScroll.js
│ ├── browser.js
│ ├── cacheFactory.js
│ ├── compile.js
│ ├── controller.js
│ ├── directive
│ │ ├── a.js
│ │ ├── booleanAttrs.js
│ │ ├── directives.js
│ │ ├── form.js
│ │ ├── input.js
│ │ ├── ngBind.js
│ │ ├── ngClass.js
│ │ ├── ngCloak.js
│ │ ├── ngController.js
│ │ ├── ngCsp.js
│ │ ├── ngEventDirs.js
│ │ ├── ngInclude.js
│ │ ├── ngInit.js
│ │ ├── ngNonBindable.js
│ │ ├── ngPluralize.js
│ │ ├── ngRepeat.js
│ │ ├── ngShowHide.js
│ │ ├── ngStyle.js
│ │ ├── ngSwitch.js
│ │ ├── ngTransclude.js
│ │ ├── ngView.js
│ │ ├── script.js
│ │ ├── select.js
│ │ └── style.js
│ ├── document.js
│ ├── exceptionHandler.js
│ ├── filter.js
│ ├── filter
│ │ ├── filter.js
│ │ ├── filters.js
│ │ ├── limitTo.js
│ │ └── orderBy.js
│ ├── http.js
│ ├── httpBackend.js
│ ├── interpolate.js
│ ├── locale.js
│ ├── location.js
│ ├── log.js
│ ├── parse.js
│ ├── q.js
│ ├── rootElement.js
│ ├── rootScope.js
│ ├── route.js
│ ├── routeParams.js
│ ├── sniffer.js
│ ├── timeout.js
│ └── window.js
├── ngCookies
│ └── cookies.js
├── ngLocale
│ ├── angular-locale_af-na.js
│ ├── angular-locale_af-za.js
│ ├── angular-locale_af.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-dz.js
│ ├── angular-locale_ar-eg.js
│ ├── angular-locale_ar-iq.js
│ ├── angular-locale_ar-jo.js
│ ├── angular-locale_ar-kw.js
│ ├── angular-locale_ar-lb.js
│ ├── angular-locale_ar-ly.js
│ ├── angular-locale_ar-ma.js
│ ├── angular-locale_ar-om.js
│ ├── angular-locale_ar-qa.js
│ ├── angular-locale_ar-sa.js
│ ├── angular-locale_ar-sd.js
│ ├── angular-locale_ar-sy.js
│ ├── angular-locale_ar-tn.js
│ ├── angular-locale_ar-ye.js
│ ├── angular-locale_ar.js
│ ├── angular-locale_bg-bg.js
│ ├── angular-locale_bg.js
│ ├── angular-locale_bn-bd.js
│ ├── angular-locale_bn-in.js
│ ├── angular-locale_bn.js
│ ├── angular-locale_ca-ad.js
│ ├── angular-locale_ca-es.js
│ ├── angular-locale_ca.js
│ ├── angular-locale_chr.js
│ ├── angular-locale_cs-cz.js
│ ├── angular-locale_cs.js
│ ├── angular-locale_cy.js
│ ├── angular-locale_da-dk.js
│ ├── angular-locale_da.js
│ ├── angular-locale_de-at.js
│ ├── angular-locale_de-be.js
│ ├── angular-locale_de-ch.js
│ ├── angular-locale_de-de.js
│ ├── angular-locale_de-li.js
│ ├── angular-locale_de-lu.js
│ ├── angular-locale_de.js
│ ├── angular-locale_el-cy.js
│ ├── angular-locale_el-gr.js
│ ├── angular-locale_el-polyton.js
│ ├── angular-locale_el.js
│ ├── angular-locale_en-as.js
│ ├── angular-locale_en-au.js
│ ├── angular-locale_en-bb.js
│ ├── angular-locale_en-be.js
│ ├── angular-locale_en-bm.js
│ ├── angular-locale_en-bw.js
│ ├── angular-locale_en-bz.js
│ ├── angular-locale_en-ca.js
│ ├── angular-locale_en-dsrt-us.js
│ ├── angular-locale_en-dsrt.js
│ ├── angular-locale_en-fm.js
│ ├── angular-locale_en-gb.js
│ ├── angular-locale_en-gu.js
│ ├── angular-locale_en-gy.js
│ ├── angular-locale_en-hk.js
│ ├── angular-locale_en-ie.js
│ ├── angular-locale_en-in.js
│ ├── angular-locale_en-iso.js
│ ├── angular-locale_en-jm.js
│ ├── angular-locale_en-mh.js
│ ├── angular-locale_en-mp.js
│ ├── angular-locale_en-mt.js
│ ├── angular-locale_en-mu.js
│ ├── angular-locale_en-na.js
│ ├── angular-locale_en-nz.js
│ ├── angular-locale_en-ph.js
│ ├── angular-locale_en-pk.js
│ ├── angular-locale_en-pr.js
│ ├── angular-locale_en-pw.js
│ ├── angular-locale_en-sg.js
│ ├── angular-locale_en-tc.js
│ ├── angular-locale_en-tt.js
│ ├── angular-locale_en-um.js
│ ├── angular-locale_en-us.js
│ ├── angular-locale_en-vg.js
│ ├── angular-locale_en-vi.js
│ ├── angular-locale_en-za.js
│ ├── angular-locale_en-zw.js
│ ├── angular-locale_en-zz.js
│ ├── angular-locale_en.js
│ ├── angular-locale_es-419.js
│ ├── angular-locale_es-ar.js
│ ├── angular-locale_es-bo.js
│ ├── angular-locale_es-cl.js
│ ├── angular-locale_es-co.js
│ ├── angular-locale_es-cr.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-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_fa-af.js
│ ├── angular-locale_fa-ir.js
│ ├── angular-locale_fa.js
│ ├── angular-locale_fi-fi.js
│ ├── angular-locale_fi.js
│ ├── angular-locale_fil-ph.js
│ ├── angular-locale_fil.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-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-km.js
│ ├── angular-locale_fr-lu.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-ne.js
│ ├── angular-locale_fr-re.js
│ ├── angular-locale_fr-rw.js
│ ├── angular-locale_fr-sn.js
│ ├── angular-locale_fr-td.js
│ ├── angular-locale_fr-tg.js
│ ├── angular-locale_fr-yt.js
│ ├── angular-locale_fr.js
│ ├── angular-locale_gl-es.js
│ ├── angular-locale_gl.js
│ ├── angular-locale_gsw-ch.js
│ ├── angular-locale_gsw.js
│ ├── angular-locale_gu-in.js
│ ├── angular-locale_gu.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-hr.js
│ ├── angular-locale_hr.js
│ ├── angular-locale_hu-hu.js
│ ├── angular-locale_hu.js
│ ├── angular-locale_id-id.js
│ ├── angular-locale_id.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.js
│ ├── angular-locale_iw.js
│ ├── angular-locale_ja-jp.js
│ ├── angular-locale_ja.js
│ ├── angular-locale_kn-in.js
│ ├── angular-locale_kn.js
│ ├── angular-locale_ko-kr.js
│ ├── angular-locale_ko.js
│ ├── angular-locale_ln-cd.js
│ ├── angular-locale_ln-cg.js
│ ├── angular-locale_ln.js
│ ├── angular-locale_lt-lt.js
│ ├── angular-locale_lt.js
│ ├── angular-locale_lv-lv.js
│ ├── angular-locale_lv.js
│ ├── angular-locale_ml-in.js
│ ├── angular-locale_ml.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.js
│ ├── angular-locale_mt-mt.js
│ ├── angular-locale_mt.js
│ ├── angular-locale_nl-aw.js
│ ├── angular-locale_nl-be.js
│ ├── angular-locale_nl-cw.js
│ ├── angular-locale_nl-nl.js
│ ├── angular-locale_nl-sx.js
│ ├── angular-locale_nl.js
│ ├── angular-locale_no.js
│ ├── angular-locale_or-in.js
│ ├── angular-locale_or.js
│ ├── angular-locale_pl-pl.js
│ ├── angular-locale_pl.js
│ ├── angular-locale_pt-ao.js
│ ├── angular-locale_pt-br.js
│ ├── angular-locale_pt-gw.js
│ ├── angular-locale_pt-mz.js
│ ├── angular-locale_pt-pt.js
│ ├── angular-locale_pt-st.js
│ ├── angular-locale_pt.js
│ ├── angular-locale_ro-md.js
│ ├── angular-locale_ro-ro.js
│ ├── angular-locale_ro.js
│ ├── angular-locale_ru-md.js
│ ├── angular-locale_ru-ru.js
│ ├── angular-locale_ru-ua.js
│ ├── angular-locale_ru.js
│ ├── angular-locale_sk-sk.js
│ ├── angular-locale_sk.js
│ ├── angular-locale_sl-si.js
│ ├── angular-locale_sl.js
│ ├── angular-locale_sq-al.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.js
│ ├── angular-locale_sr-latn-ba.js
│ ├── angular-locale_sr-latn-me.js
│ ├── angular-locale_sr-latn-rs.js
│ ├── angular-locale_sr-latn.js
│ ├── angular-locale_sr-rs.js
│ ├── angular-locale_sr.js
│ ├── angular-locale_sv-fi.js
│ ├── angular-locale_sv-se.js
│ ├── angular-locale_sv.js
│ ├── angular-locale_sw-ke.js
│ ├── angular-locale_sw-tz.js
│ ├── angular-locale_sw.js
│ ├── angular-locale_ta-in.js
│ ├── angular-locale_ta-lk.js
│ ├── angular-locale_ta.js
│ ├── angular-locale_te-in.js
│ ├── angular-locale_te.js
│ ├── angular-locale_th-th.js
│ ├── angular-locale_th.js
│ ├── angular-locale_tl-ph.js
│ ├── angular-locale_tl.js
│ ├── angular-locale_tr-tr.js
│ ├── angular-locale_tr.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_vi-vn.js
│ ├── angular-locale_vi.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
├── ngMobile
│ ├── directive
│ │ └── ngClick.js
│ └── mobile.js
├── ngMock
│ └── angular-mocks.js
├── ngResource
│ └── resource.js
├── ngSanitize
│ ├── directive
│ │ └── ngBindHtml.js
│ ├── filter
│ │ └── linky.js
│ └── sanitize.js
├── ngScenario
│ ├── Application.js
│ ├── Describe.js
│ ├── Future.js
│ ├── ObjectModel.js
│ ├── Runner.js
│ ├── Scenario.js
│ ├── SpecRunner.js
│ ├── angular-bootstrap.js
│ ├── angular.prefix
│ ├── angular.suffix
│ ├── dsl.js
│ ├── matchers.js
│ └── output
│ │ ├── Html.js
│ │ ├── Json.js
│ │ ├── Object.js
│ │ └── Xml.js
└── publishExternalApis.js
├── start-iteration.sh
├── test
├── AngularSpec.js
├── ApiSpecs.js
├── BinderSpec.js
├── auto
│ └── injectorSpec.js
├── bootstrap
│ ├── bootstrapSpec.js
│ └── code.html
├── jQueryPatchSpec.js
├── jqLiteSpec.js
├── jquery_alias.js
├── jquery_remove.js
├── loaderSpec.js
├── matchers.js
├── ng
│ ├── anchorScrollSpec.js
│ ├── browserSpecs.js
│ ├── cacheFactorySpec.js
│ ├── compileSpec.js
│ ├── controllerSpec.js
│ ├── directive
│ │ ├── aSpec.js
│ │ ├── booleanAttrsSpec.js
│ │ ├── formSpec.js
│ │ ├── inputSpec.js
│ │ ├── ngBindSpec.js
│ │ ├── ngClassSpec.js
│ │ ├── ngClickSpec.js
│ │ ├── ngCloakSpec.js
│ │ ├── ngControllerSpec.js
│ │ ├── ngCspSpec.js
│ │ ├── ngEventDirsSpec.js
│ │ ├── ngIncludeSpec.js
│ │ ├── ngInitSpec.js
│ │ ├── ngKeySpec.js
│ │ ├── ngNonBindableSpec.js
│ │ ├── ngPluralizeSpec.js
│ │ ├── ngRepeatSpec.js
│ │ ├── ngShowHideSpec.js
│ │ ├── ngSrcSpec.js
│ │ ├── ngStyleSpec.js
│ │ ├── ngSwitchSpec.js
│ │ ├── ngViewSpec.js
│ │ ├── scriptSpec.js
│ │ ├── selectSpec.js
│ │ └── styleSpec.js
│ ├── documentSpec.js
│ ├── exceptionHandlerSpec.js
│ ├── filter
│ │ ├── filterSpec.js
│ │ ├── filtersSpec.js
│ │ ├── limitToSpec.js
│ │ └── orderBySpec.js
│ ├── httpBackendSpec.js
│ ├── httpSpec.js
│ ├── interpolateSpec.js
│ ├── localeSpec.js
│ ├── locationSpec.js
│ ├── logSpec.js
│ ├── parseSpec.js
│ ├── qSpec.js
│ ├── rootElementSpec.js
│ ├── rootScopeSpec.js
│ ├── routeParamsSpec.js
│ ├── routeSpec.js
│ ├── snifferSpec.js
│ ├── timeoutSpec.js
│ └── windowSpec.js
├── ngCookies
│ └── cookiesSpec.js
├── ngMobile
│ └── directive
│ │ └── ngClickSpec.js
├── ngMock
│ └── angular-mocksSpec.js
├── ngResource
│ └── resourceSpec.js
├── ngSanitize
│ ├── directive
│ │ └── ngBindHtmlSpec.js
│ ├── filter
│ │ └── linkySpec.js
│ └── sanitizeSpec.js
├── ngScenario
│ ├── ApplicationSpec.js
│ ├── DescribeSpec.js
│ ├── FutureSpec.js
│ ├── ObjectModelSpec.js
│ ├── RunnerSpec.js
│ ├── ScenarioSpec.js
│ ├── SpecRunnerSpec.js
│ ├── dslSpec.js
│ ├── e2e
│ │ ├── Runner-compiled.html
│ │ ├── Runner.html
│ │ ├── style.css
│ │ ├── widgets-scenario.js
│ │ └── widgets.html
│ ├── jstd-scenario-adapter
│ │ └── AdapterSpecs.js
│ ├── matchersSpec.js
│ ├── mocks.js
│ └── output
│ │ ├── HtmlSpec.js
│ │ ├── jsonSpec.js
│ │ ├── objectSpec.js
│ │ └── xmlSpec.js
└── testabilityPatch.js
├── testacular-e2e.conf.js
├── testacular-jqlite.conf.js
├── testacular-jquery.conf.js
├── testacular-modules.conf.js
├── validate-commit-msg.js
├── validate-commit-msg.spec.js
├── version.js
├── version.yaml
└── watchr-docs.rb
/.gitignore:
--------------------------------------------------------------------------------
1 | build/
2 | angularjs.netrc
3 | jstd.log
4 | .DS_Store
5 | gen_docs.disable
6 | test.disable
7 | regression/temp*.html
8 | performance/temp*.html
9 | .idea/workspace.xml
10 | *~
11 | angular.js.tmproj
12 | node_modules
13 | angular.xcodeproj
14 | .idea
15 |
--------------------------------------------------------------------------------
/.travis.yml:
--------------------------------------------------------------------------------
1 | language: node_js
2 | node_js:
3 | - 0.8
4 |
5 | before_script:
6 | - export DISPLAY=:99.0
7 | - sh -e /etc/init.d/xvfb start
8 | - npm install -g grunt-cli
9 | - grunt package
10 | - grunt webserver > /dev/null &
11 |
12 | script:
13 | - grunt test --browsers Firefox --reporters=dots
14 |
--------------------------------------------------------------------------------
/CONTRIBUTING.md:
--------------------------------------------------------------------------------
1 | ## Submitting issues
2 |
3 | If you have questions about how to use AngularJS, please direct these to the
4 | [Google Group][groups] discussion list or [StackOverflow][stackoverflow]. We are
5 | also available on [IRC][irc].
6 |
7 | ### Guidelines
8 |
9 | * Search the archive first, it's likely that your question was already answered.
10 | * A live example demonstrating your problem or question, will get an answer faster.
11 | * Create one using this [template][template]
12 | * If you get help, help others. Good karma rulez!
13 |
14 | If your issue appears to be a bug, and hasn't been reported, open a new issue.
15 | Help us to maximize the effort we can spend fixing issues and adding new
16 | features, by not reporting duplicate issues.
17 |
18 | [stackoverflow]: http://stackoverflow.com/questions/tagged/angularjs
19 | [groups]: https://groups.google.com/forum/?fromgroups#!forum/angular
20 | [irc]: http://webchat.freenode.net/?channels=angularjs&uio=d4
21 | [template]: http://plnkr.co/edit/gist:3510140
22 |
23 | ## Contributing to Source Code
24 |
25 | We'd love for you to contribute to our source code and to make AngularJS even
26 | better than it is today!
27 |
28 | Please read the [contribution guidelines][contribute] to learn about how to submit code as well as
29 | other useful info like how to build and test AngularJS code.
30 |
31 | [list]: https://groups.google.com/forum/?fromgroups#!forum/angular
32 | [contribute]: http://docs.angularjs.org/misc/contribute
33 |
--------------------------------------------------------------------------------
/LICENSE:
--------------------------------------------------------------------------------
1 | The MIT License
2 |
3 | Copyright (c) 2010-2012 Google, Inc. 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.md:
--------------------------------------------------------------------------------
1 | AngularJS
2 | =========
3 |
4 | AngularJS lets you write client-side web applications as if you had a smarter browser. It lets you
5 | use good old HTML (or HAML, Jade and friends!) as your template language and lets you extend HTML’s
6 | syntax to express your application’s components clearly and succinctly. It automatically
7 | synchronizes data from your UI (view) with your JavaScript objects (model) through 2-way data
8 | binding. To help you structure your application better and make it easy to test, AngularJS teaches
9 | the browser how to do dependency injection and inversion of control. Oh yeah and it also helps with
10 | server-side communication, taming async callbacks with promises and deferreds; and make client-side
11 | navigation and deeplinking with hashbang urls or HTML5 pushState a piece of cake. The best of all:
12 | it makes development fun!
13 |
14 | * Web site: http://angularjs.org
15 | * Tutorial: http://docs.angularjs.org/tutorial
16 | * API Docs: http://docs.angularjs.org/api
17 | * Developer Guide: http://docs.angularjs.org/guide
18 | * Contribution guidelines: http://docs.angularjs.org/misc/contribute
19 |
20 | Building AngularJS
21 | ---------
22 | [Once you have your environment setup](http://docs.angularjs.org/misc/contribute) just run:
23 |
24 | grunt package
25 |
26 |
27 | Running Tests
28 | -------------
29 | To execute all unit tests, use:
30 |
31 | grunt test:unit
32 |
33 | To execute end-to-end (e2e) tests, use:
34 |
35 | grunt package
36 | grunt test:e2e
37 |
38 | To learn more about the grunt tasks, run `grunt --help` and also read our
39 | [contribution guidelines](http://docs.angularjs.org/misc/contribute).
40 |
--------------------------------------------------------------------------------
/changelog.spec.js:
--------------------------------------------------------------------------------
1 | describe('changelog.js', function() {
2 | var ch = require('./changelog');
3 |
4 | describe('parseRawCommit', function() {
5 | it('should parse raw commit', function() {
6 | var msg = ch.parseRawCommit(
7 | '9b1aff905b638aa274a5fc8f88662df446d374bd\n' +
8 | 'feat(scope): broadcast $destroy event on scope destruction\n' +
9 | 'perf testing shows that in chrome this change adds 5-15% overhead\n' +
10 | 'when destroying 10k nested scopes where each scope has a $destroy listener\n');
11 |
12 | expect(msg.type).toBe('feat');
13 | expect(msg.hash).toBe('9b1aff905b638aa274a5fc8f88662df446d374bd');
14 | expect(msg.subject).toBe('broadcast $destroy event on scope destruction');
15 | expect(msg.body).toBe('perf testing shows that in chrome this change adds 5-15% overhead\n' +
16 | 'when destroying 10k nested scopes where each scope has a $destroy listener\n')
17 | expect(msg.component).toBe('scope');
18 | });
19 |
20 |
21 | it('should parse closed issues', function() {
22 | var msg = ch.parseRawCommit(
23 | '13f31602f396bc269076ab4d389cfd8ca94b20ba\n' +
24 | 'feat(ng-list): Allow custom separator\n' +
25 | 'bla bla bla\n\n' +
26 | 'Closes #123\nCloses #25\n');
27 |
28 | expect(msg.closes).toEqual([123, 25]);
29 | });
30 |
31 |
32 | it('should parse breaking changes', function() {
33 | var msg = ch.parseRawCommit(
34 | '13f31602f396bc269076ab4d389cfd8ca94b20ba\n' +
35 | 'feat(ng-list): Allow custom separator\n' +
36 | 'bla bla bla\n\n' +
37 | 'BREAKING CHANGE: first breaking change\nsomething else\n' +
38 | 'another line with more info\n');
39 |
40 | expect(msg.breaking).toEqual(' first breaking change\nsomething else\nanother line with more info\n');
41 | });
42 | });
43 | });
44 |
--------------------------------------------------------------------------------
/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 |
--------------------------------------------------------------------------------
/css/angular.css:
--------------------------------------------------------------------------------
1 | @charset "UTF-8";
2 |
3 | [ng\:cloak], [ng-cloak], [data-ng-cloak], [x-ng-cloak],
4 | .ng-cloak, .x-ng-cloak {
5 | display: none;
6 | }
7 |
8 | ng\:form {
9 | display: block;
10 | }
11 |
--------------------------------------------------------------------------------
/docs/content/api/index.ngdoc:
--------------------------------------------------------------------------------
1 | @ngdoc overview
2 | @name API Reference
3 | @description
4 |
5 | Use the API Reference documentation when you need more information about a specific feature. Check out
6 | {@link guide/ Developer Guide} for AngularJS concepts. If you are new to AngularJS we recommend the
7 | {@link tutorial/ Tutorial}.
8 |
--------------------------------------------------------------------------------
/docs/content/api/ng.ngdoc:
--------------------------------------------------------------------------------
1 | @ngdoc overview
2 | @name ng
3 | @description
4 |
5 | The `ng` is an angular module which contains all of the core angular services.
6 |
--------------------------------------------------------------------------------
/docs/content/cookbook/helloworld.ngdoc:
--------------------------------------------------------------------------------
1 | @ngdoc overview
2 | @name Cookbook: Hello World
3 | @description
4 |
5 |
15 | Hello {{name}}!
16 |
9 |
10 | In the Angular implementation of MVC, the view has knowledge of both the model and the controller.
11 | The view knows about the model where two-way data-binding occurs. The view has knowledge of the
12 | controller through Angular directives, such as {@link api/ng.directive:ngController
13 | ngController} and {@link api/ng.directive:ngView ngView}, and through bindings of this form:
14 | `{{someControllerFunction()}}`. In these ways, the view can call functions in an associated
15 | controller function.
16 |
17 |
18 | ## Related Topics
19 |
20 | * {@link dev_guide.mvc About MVC in Angular}
21 | * {@link dev_guide.mvc.understanding_model Understanding the Model Component}
22 | * {@link dev_guide.mvc.understanding_controller Understanding the Controller Component}
23 |
--------------------------------------------------------------------------------
/docs/content/guide/dev_guide.services.ngdoc:
--------------------------------------------------------------------------------
1 | @ngdoc overview
2 | @name Developer Guide: Angular Services
3 | @description
4 |
5 | Services are a feature that Angular brings to client-side web apps from the server side, where
6 | services have been commonly used for a long time. Services in Angular apps are substitutable
7 | objects that are wired together using {@link di dependency injection (DI)}.
8 |
9 |
10 | ## Related Topics
11 |
12 | * {@link dev_guide.services.understanding_services Understanding Angular Services}
13 | * {@link dev_guide.services.creating_services Creating Angular Services}
14 | * {@link dev_guide.services.managing_dependencies Managing Service Dependencies}
15 | * {@link dev_guide.services.injecting_controllers Injecting Services Into Controllers}
16 | * {@link dev_guide.services.testing_services Testing Angular Services}
17 |
18 | ## Related API
19 |
20 | * {@link api/ng Angular Service API}
21 |
--------------------------------------------------------------------------------
/docs/content/guide/dev_guide.services.testing_services.ngdoc:
--------------------------------------------------------------------------------
1 | @ngdoc overview
2 | @name Developer Guide: Angular Services: Testing Angular Services
3 | @description
4 |
5 | The following is a unit test for the 'notify' service in the 'Dependencies' example in {@link
6 | dev_guide.services.creating_services Creating Angular Services}. The unit test example uses Jasmine
7 | spy (mock) instead of a real browser alert.
8 |
9 |
10 | var mock, notify; 11 | 12 | beforeEach(function() { 13 | mock = {alert: jasmine.createSpy()}; 14 | 15 | module(function($provide) { 16 | $provide.value('$window', mock); 17 | }); 18 | 19 | inject(function($injector) { 20 | notify = $injector.get('notify'); 21 | }); 22 | }); 23 | 24 | it('should not alert first two notifications', function() { 25 | notify('one'); 26 | notify('two'); 27 | 28 | expect(mock.alert).not.toHaveBeenCalled(); 29 | }); 30 | 31 | it('should alert all after third notification', function() { 32 | notify('one'); 33 | notify('two'); 34 | notify('three'); 35 | 36 | expect(mock.alert).toHaveBeenCalledWith("one\ntwo\nthree"); 37 | }); 38 | 39 | it('should clear messages after alert', function() { 40 | notify('one'); 41 | notify('two'); 42 | notify('third'); 43 | notify('more'); 44 | notify('two'); 45 | notify('third'); 46 | 47 | expect(mock.alert.callCount).toEqual(2); 48 | expect(mock.alert.mostRecentCall.args).toEqual(["more\ntwo\nthird"]); 49 | }); 50 |51 | 52 | 53 | ## Related Topics 54 | 55 | * {@link dev_guide.services.understanding_services Understanding Angular Services} 56 | * {@link dev_guide.services.creating_services Creating Angular Services} 57 | * {@link dev_guide.services.managing_dependencies Managing Service Dependencies} 58 | * {@link dev_guide.services.injecting_controllers Injecting Services Into Controllers} 59 | 60 | ## Related API 61 | 62 | * {@link api/ng Angular Service API} 63 | -------------------------------------------------------------------------------- /docs/content/guide/dev_guide.services.understanding_services.ngdoc: -------------------------------------------------------------------------------- 1 | @ngdoc overview 2 | @name Developer Guide: Angular Services: Understanding Angular Services 3 | @description 4 | 5 | Angular services are singletons that carry out specific tasks common to web apps, such as the 6 | {@link api/ng.$http $http service} that provides low level access to the browser's 7 | `XMLHttpRequest` object. 8 | 9 | To use an Angular service, you identify it as a dependency for the dependent (a controller, or 10 | another service) that depends on the service. Angular's dependency injection subsystem takes care 11 | of the rest. The Angular injector subsystem is in charge of service instantiation, resolution of 12 | dependencies, and provision of dependencies to factory functions as requested. 13 | 14 | Angular injects dependencies using "constructor" injection (the service is passed in via a factory 15 | function). Because JavaScript is a dynamically typed language, Angular's dependency injection 16 | subsystem cannot use static types to identify service dependencies. For this reason a dependent 17 | must explicitly define its dependencies by using the `$inject` property. For example: 18 | 19 | myController.$inject = ['$location']; 20 | 21 | The Angular web framework provides a set of services for common operations. Like other core Angular 22 | variables and identifiers, the built-in services always start with `$` (such as `$http` mentioned 23 | above). You can also create your own custom services. 24 | 25 | 26 | ## Related Topics 27 | 28 | * {@link di About Angular Dependency Injection} 29 | * {@link dev_guide.services.creating_services Creating Angular Services} 30 | * {@link dev_guide.services.managing_dependencies Managing Service Dependencies} 31 | * {@link dev_guide.services.testing_services Testing Angular Services} 32 | 33 | ## Related API 34 | 35 | * {@link api/ng Angular Service API} 36 | * {@link api/angular.injector Injector API} 37 | -------------------------------------------------------------------------------- /docs/content/guide/dev_guide.templates.css-styling.ngdoc: -------------------------------------------------------------------------------- 1 | @ngdoc overview 2 | @name Developer Guide: Templates: Working With CSS in Angular 3 | @description 4 | 5 | 6 | Angular sets these CSS classes. It is up to your application to provide useful styling. 7 | 8 | # CSS classes used by angular 9 | 10 | * `ng-invalid`, `ng-valid` 11 | - **Usage:** angular applies this class to an input widget element if that element's input does 12 | not pass validation. (see {@link api/ng.directive:input input} directive). 13 | 14 | * `ng-pristine`, `ng-dirty` 15 | - **Usage:** angular {@link api/ng.directive:input input} directive applies `ng-pristine` class 16 | to a new input widget element which did not have user interaction. Once the user interacts with 17 | the input widget the class is changed to `ng-dirty`. 18 | 19 | 20 | ## Related Topics 21 | 22 | * {@link dev_guide.templates Angular Templates} 23 | * {@link forms Angular Forms} 24 | -------------------------------------------------------------------------------- /docs/content/guide/dev_guide.templates.databinding.ngdoc: -------------------------------------------------------------------------------- 1 | @ngdoc overview 2 | @name Developer Guide: Templates: Data Binding in Angular 3 | @description 4 | 5 | Data-binding in Angular web apps is the automatic syncronization of data between the model and view 6 | components. The way that Angular implements data-binding lets you treat the model as the 7 | single-source-of-truth in your application. The view is a projection of the model at all times. 8 | When the model changes, the view reflects the change, and vice versa. 9 | 10 | ## Data Binding in Classical Template Systems 11 | 12 |
25 |
29 | Fast just got faster with Nexus S. 30 |
31 |35 | The Next, Next Generation tablet. 36 |
37 |Total number of phones: 2
47 | 48 | 49 | # Summary 50 | 51 | This addition to your app uses static HTML to display the list. Now, let's go to {@link step_02 52 | step 2} to learn how to use AngularJS to dynamically generate the same list. 53 | 54 | 55 |This page is currently unavailable because your are offline.
4 |Please connect to the Internet and reload the page.
5 | -------------------------------------------------------------------------------- /example/buzz/buzz.css: -------------------------------------------------------------------------------- 1 | body { 2 | background: -webkit-gradient(linear, left top, left 100, from(#bbb), to(#fff)); 3 | background-repeat: no-repeat; 4 | margin: 0px; 5 | font-family: sans-serif; 6 | font-size: 12px; 7 | } 8 | 9 | body > div { 10 | border-top: 1px solid white; 11 | border-bottom: 1px solid black; 12 | text-align: center; 13 | background: -webkit-gradient(linear, left top, left bottom, from(#CCC), to(#888)); 14 | -webkit-background-origin: padding; -webkit-background-clip: content; 15 | } 16 | body > div button { 17 | margin: 5px; 18 | } 19 | 20 | body > div span:FIRST-CHILD { 21 | float: left; 22 | font-family: monospace; 23 | font-size: 1.5em; 24 | color: black; 25 | padding: 2px 5px; 26 | } 27 | 28 | body > div span:last-child { 29 | float: right; 30 | } 31 | 32 | ul { 33 | list-style: none; 34 | padding: 10px; 35 | margin: 0; 36 | } 37 | 38 | body > ul > li { 39 | border: 1px solid black; 40 | margin: 15px 5px; 41 | padding: 0; 42 | -webkit-box-shadow: 5px 5px 5px #888; 43 | } 44 | 45 | body > ul > li > h1 { 46 | margin: 0; 47 | background: -webkit-gradient(linear, left top, left bottom, from(#ddd), to(#999)); 48 | font-size: 13px; 49 | border-bottom: 1px solid black; 50 | } 51 | 52 | h1 > img, 53 | li > img { 54 | max-height: 30px; 55 | max-width: 30px; 56 | vertical-align: middle; 57 | padding: 3px; 58 | } 59 | 60 | a > img { 61 | margin-right: 5px; 62 | margin-top: 5px; 63 | } 64 | 65 | body > ul > li > h1 > a:last-child { 66 | float: right; 67 | margin: 10px; 68 | } 69 | 70 | body > ul > li > div { 71 | background-color: white; 72 | background: -webkit-gradient(linear, left top, left bottom, from(#fff), to(#ddd)); 73 | margin: 0; 74 | padding: 10px; 75 | } 76 | 77 | body > ul > li ul { 78 | margin: 0; 79 | padding: 0; 80 | margin-left: 5px; 81 | border-left: 5px solid lightgray; 82 | } 83 | 84 | body > ul > li ul > li { 85 | margin: 0; 86 | padding: 10px; 87 | background: -webkit-gradient(linear, left top, left bottom, from(#fff), to(#ddd)); 88 | } 89 | 90 | -------------------------------------------------------------------------------- /example/buzz/buzz.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 |23 | view1 | view2 | blank 24 |
25 | 26 |tweets=(TODO: display me!!!)33 | 34 | 35 | -------------------------------------------------------------------------------- /example/tweeter/tweeterclient.js: -------------------------------------------------------------------------------- 1 | function noop() {} 2 | $(document).ready(function() { 3 | function xhr(method, url, data, callback){ 4 | jQuery.getJSON(url, function() { 5 | callback.apply(this, arguments); 6 | scope.updateView(); 7 | }); 8 | } 9 | 10 | var resourceFactory = new ResourceFactory(xhr); 11 | 12 | var Tweeter = resourceFactory.route("http://twitter.com/statuses/:service:username.json", {}, { 13 | home: {method:'GET', params: {service:'home_timeline'}, isArray:true }, 14 | user: {method:'GET', params: {service:'user_timeline/'}, isArray:true } 15 | }); 16 | 17 | 18 | var scope = window.scope = angular.compile(document, { 19 | location:angular.startUrlWatcher() 20 | }); 21 | 22 | function fetchTweets(username){ 23 | return username ? Tweeter.user({username: username}) : Tweeter.home(); 24 | } 25 | 26 | scope.set('fetchTweets', fetchTweets); 27 | scope.set('users', [ 28 | {screen_name:'mhevery', name:'Mi\u0161ko Hevery', 29 | notes:'Author of
myStyle={{myStyle}}23 |
20 | * // Given: 21 | * // URL: http://server.com/index.html#/Chapter/1/Section/2?search=moby 22 | * // Route: /Chapter/:chapterId/Section/:sectionId 23 | * // 24 | * // Then 25 | * $routeParams ==> {chapterId:1, sectionId:2, search:'moby'} 26 | *27 | */ 28 | function $RouteParamsProvider() { 29 | this.$get = valueFn({}); 30 | } 31 | -------------------------------------------------------------------------------- /src/ng/sniffer.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | 3 | /** 4 | * !!! This is an undocumented "private" service !!! 5 | * 6 | * @name ng.$sniffer 7 | * @requires $window 8 | * @requires $document 9 | * 10 | * @property {boolean} history Does the browser support html5 history api ? 11 | * @property {boolean} hashchange Does the browser support hashchange event ? 12 | * 13 | * @description 14 | * This is very simple implementation of testing browser's features. 15 | */ 16 | function $SnifferProvider() { 17 | this.$get = ['$window', '$document', function($window, $document) { 18 | var eventSupport = {}, 19 | android = int((/android (\d+)/.exec(lowercase($window.navigator.userAgent)) || [])[1]), 20 | document = $document[0]; 21 | 22 | return { 23 | // Android has history.pushState, but it does not update location correctly 24 | // so let's not use the history API at all. 25 | // http://code.google.com/p/android/issues/detail?id=17471 26 | // https://github.com/angular/angular.js/issues/904 27 | history: !!($window.history && $window.history.pushState && !(android < 4)), 28 | hashchange: 'onhashchange' in $window && 29 | // IE8 compatible mode lies 30 | (!document.documentMode || document.documentMode > 7), 31 | hasEvent: function(event) { 32 | // IE9 implements 'input' event it's so fubared that we rather pretend that it doesn't have 33 | // it. In particular the event is not fired when backspace or delete key are pressed or 34 | // when cut operation is performed. 35 | if (event == 'input' && msie == 9) return false; 36 | 37 | if (isUndefined(eventSupport[event])) { 38 | var divElm = document.createElement('div'); 39 | eventSupport[event] = 'on' + event in divElm; 40 | } 41 | 42 | return eventSupport[event]; 43 | }, 44 | csp: document.securityPolicy ? document.securityPolicy.isActive : false 45 | }; 46 | }]; 47 | } 48 | -------------------------------------------------------------------------------- /src/ng/window.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | 3 | /** 4 | * @ngdoc object 5 | * @name ng.$window 6 | * 7 | * @description 8 | * A reference to the browser's `window` object. While `window` 9 | * is globally available in JavaScript, it causes testability problems, because 10 | * it is a global variable. In angular we always refer to it through the 11 | * `$window` service, so it may be overriden, removed or mocked for testing. 12 | * 13 | * All expressions are evaluated with respect to current scope so they don't 14 | * suffer from window globality. 15 | * 16 | * @example 17 |