From 245b60d69af7cde614e52f3899846327c211c9f2 Mon Sep 17 00:00:00 2001 From: Misko Hevery Date: Tue, 1 Feb 2011 10:01:02 -0800 Subject: [PATCH] addded cookbook --- docs/cookbook.buzz.ngdoc | 4 + docs/cookbook.deeplinking.ngdoc | 4 + docs/cookbook.form.ngdoc | 85 +++++++++++++++++++++ docs/cookbook.formadvanced.ngdoc | 4 + docs/cookbook.helloworld.ngdoc | 31 ++++++++ docs/cookbook.mvc.ngdoc | 4 + docs/cookbook.ngdoc | 60 +++++++++++++++ docs/fag.ngdoc | 81 ++++++++++++++++++++ docs/img/angular_parts.png | Bin 0 -> 54347 bytes docs/img/helloworld.png | Bin 0 -> 11736 bytes docs/img/helloworld_2way.png | Bin 0 -> 13556 bytes docs/src/ngdoc.js | 3 +- docs/src/templates/doc_widgets.js | 27 ++++--- docs/src/templates/docs.js | 21 ++--- docs/src/templates/index.html | 4 +- docs/started.ngdoc | 122 ++++++++++++++++++++++++++++++ 16 files changed, 426 insertions(+), 24 deletions(-) create mode 100644 docs/cookbook.buzz.ngdoc create mode 100644 docs/cookbook.deeplinking.ngdoc create mode 100644 docs/cookbook.form.ngdoc create mode 100644 docs/cookbook.formadvanced.ngdoc create mode 100644 docs/cookbook.helloworld.ngdoc create mode 100644 docs/cookbook.mvc.ngdoc create mode 100644 docs/cookbook.ngdoc create mode 100644 docs/fag.ngdoc create mode 100644 docs/img/angular_parts.png create mode 100644 docs/img/helloworld.png create mode 100644 docs/img/helloworld_2way.png create mode 100644 docs/started.ngdoc diff --git a/docs/cookbook.buzz.ngdoc b/docs/cookbook.buzz.ngdoc new file mode 100644 index 00000000..0e89cd20 --- /dev/null +++ b/docs/cookbook.buzz.ngdoc @@ -0,0 +1,4 @@ +@workInProgress +@ngdoc overview +@name Cookbook: Resources - Buzz Demo +@description diff --git a/docs/cookbook.deeplinking.ngdoc b/docs/cookbook.deeplinking.ngdoc new file mode 100644 index 00000000..1629a0b1 --- /dev/null +++ b/docs/cookbook.deeplinking.ngdoc @@ -0,0 +1,4 @@ +@workInProgress +@ngdoc overview +@name Cookbook: Deep Linking +@description diff --git a/docs/cookbook.form.ngdoc b/docs/cookbook.form.ngdoc new file mode 100644 index 00000000..80ec7b98 --- /dev/null +++ b/docs/cookbook.form.ngdoc @@ -0,0 +1,85 @@ +@workInProgress +@ngdoc overview +@name Cookbook: Form +@description + +A web application's main purpose is to present and gather data. For this reason strives to make both of these operations trivial. This example shows off how you can build a simple form to allow a user to enter data. + + + + + +
+ +
+

+ +
+
+ , + +

+ + + [ add ] +
+ + + [ X ] +
+
+ Debug View: +
user={{user}}
+
+ +
+ + it('should show debug', function(){ + expect(binding('user')).toMatch(/John Smith/); + }); + iit('should add contact', function(){ + using('.example').element('a:contains(add)').click(); + using('.example div:last').input('contact.value').enter('you@example.org'); + expect(binding('user')).toMatch(/\(234\) 555\-1212/); + expect(binding('user')).toMatch(/you@example.org/); + }); + + iit('should remove contact', function(){ + }); + + iit('should validate zip', function(){ + }); + + iit('should validate state', function(){ + }); + +
+ + +# Things to notice + +* The user data model is initialized {@link angular.ng:controller controller} and is available in + the {@link angular.scope scope} with the initial data. +* For debugging purposes we have included a debug view of the model to better understand what + is going on. +* The {@link angular.widget.HTML input widgets} simply refer to the model and are auto bound. +* The inputs {@link angular.validator validate}. (Try leaving them blank or entering non digits + in the zip field) +* In your application you can simply read from or write to the model and the form will be updated. +* By clicking the 'add' link you are adding new items into the `user.contacts` array which are then + reflected in the view. diff --git a/docs/cookbook.formadvanced.ngdoc b/docs/cookbook.formadvanced.ngdoc new file mode 100644 index 00000000..5b93b33e --- /dev/null +++ b/docs/cookbook.formadvanced.ngdoc @@ -0,0 +1,4 @@ +@workInProgress +@ngdoc overview +@name Cookbook: Advanced Form +@description diff --git a/docs/cookbook.helloworld.ngdoc b/docs/cookbook.helloworld.ngdoc new file mode 100644 index 00000000..ba4c6885 --- /dev/null +++ b/docs/cookbook.helloworld.ngdoc @@ -0,0 +1,31 @@ +@workInProgress +@ngdoc overview +@name Cookbook: Hello World +@description + + + + Your name: +
+ Hello {{name}}! +
+ + iit('should change the binding when user enters text', function(){ + expect(binding('name')).toEqual('World'); + input('name').enter('angular'); + expect(binding('name')).toEqual('angular'); + }); + +
+ +# Things to notice + +Take a look through the source and note: + +* The script tag that {@link guide.bootstrap bootstraps} the angular environment. +* The text {@link angular.widget.HTML input widget} which is bound to the greeting name text. +* No need for listener registration and event firing on change events. +* The implicit presence of the `name` variable which is in the root {@link angular.scope scope}. +* The double curly brace `{{markup}}`, which binds the name variable to the greeting text. +* The concept of {@link guide.data-binding data binding}, which reflects any changes to the + input field in the greeting text. diff --git a/docs/cookbook.mvc.ngdoc b/docs/cookbook.mvc.ngdoc new file mode 100644 index 00000000..d63c1f25 --- /dev/null +++ b/docs/cookbook.mvc.ngdoc @@ -0,0 +1,4 @@ +@workInProgress +@ngdoc overview +@name Cookbook: MVC +@description diff --git a/docs/cookbook.ngdoc b/docs/cookbook.ngdoc new file mode 100644 index 00000000..7dc937c5 --- /dev/null +++ b/docs/cookbook.ngdoc @@ -0,0 +1,60 @@ +@workInProgress +@ngdoc overview +@name Cookbook +@description + +Welcome to the angular cookbook. Here we will show you typical uses of angular by example. + + +# Hello World + +{@link cookbook.helloworld Hello World}: The simplest possible application that demonstrates the +classic Hello World! + + +# Basic Form + +{@link cookbook.form Basic Form}: Displaying forms to the user for editing is the bread and butter +of web applications. Angular makes forms easy through bidirectional data binding. + + +# Advanced Form + +{@link cookbook.formadvanced Advanced Form}: Taking the form example to the next level and +providing advanced features such as dirty detection, form reverting and submit disabling if +validation errors exist. + + +# Model View Controller + +{@link cookbook.mvc MVC}: Tic-Tac-Toe: Model View Controller (MVC) is a time-tested design pattern +to separate the behavior (JavaScript controller) from the presentation (HTML view). This +separation aids in maintainability and testability of your project. + + +# Multi-page App and Deep Linking + +{@link cookbook.deeplinking Deep Linking}: An AJAX application never navigates away from the +first page it loads. Instead, it changes the DOM of its single page. Eliminating full-page reloads +is what makes AJAX apps responsive, but it creates a problem in that apps with a single URL +prevent you from emailing links to a particular screen within your application. + +Deep linking tries to solve this by changing the URL anchor without reloading a page, thus +allowing you to send links to specific screens in your app. + + +# Services + +{@link angular.service Services}: Services are long lived objects in your applications that are +available across controllers. A collection of useful services are pre-bundled with angular but you +will likely add your own. Services are initialized using dependency injection, which resolves the +order of initialization. This safeguards you from the perils of global state (a common way to +implement long lived objects). + + +# External Resources + +{@link cookbook.buzz Resources}: Web applications must be able to communicate with the external +services to get and update data. Resources are the abstractions of external URLs which are +specially tailored to angular data binding. + diff --git a/docs/fag.ngdoc b/docs/fag.ngdoc new file mode 100644 index 00000000..144c8c8c --- /dev/null +++ b/docs/fag.ngdoc @@ -0,0 +1,81 @@ +@workInProgress +@ngdoc overview +@name FAQ +@description + +#FAQ + +### Why is this project called "angular"? Why is the namespace called "ng"? + +Because HTML has angular brackets and "ng" sounds like "angular". + +### Is an HTML5 tag? + +No, is not an HTML5 tag. angular is an orthogonal project to HTML5; you can use the two +together. + +### Is angular a {library, framework, DOM manipulation library, widget library, native plugin}? + +No, angular is none of these. You don't call its functions, it does not call your functions, +it does not provide a way to manipulate DOM, but does provide primitives to create UI projections +of your data. There are lots of existing widget libraries which you can integrate with angular. +It is 100% JavaScript, 100% client side and compatible with both desktop and mobile browsers. + +### Do I need to worry about security holes in angular? + +Like with any technology, angular is not impervious to attack. angular does, however, provide +built-in protection from basic security holes including cross-site scripting and HTML injection +attacks. angular does round-trip escaping on all strings for you. + +### Can I download the source, build, and host the angular environment locally? + +Yes. See instructions in {@link guide.downloading downloading}. + +### Is angular a templating system? + +At the highest level, angular does look like a just another templating system. But there is one +important reason why angular templating system is different and makes it very good fit for +application development: bidirectional data binding. The template is compiled on the browser and +the compilation step produces a live view. This means you, the developer, don't need to write +code to constantly sync the view with the model and the model with the view as in other +templating systems. + +### What browsers does angular work with? + +Webkit-based browsers (Safari, Chrome, iPhone, Android, WebOS, BlackBerry 6), Firefox, IE6 and +above. Note that CSS only works on IE7 and above. + +### What's angular's performance like? + +angular takes ~300ms to load, render, and compile. In Chrome it uses about 2-5MB of memory. Your +app's performance will vary depending on how many bindings you use. + +### How big is the angular bootstrap JS file that I need to include? + +The size of the library itself is < 50KB compressed and obfuscated. + +### Can I use the open-source Closure Library with angular? + +Yes, you can use widgets from the {@link http://code.google.com/closure/library Closure Library} +in angular. + +### Does angular use the jQuery library? + +Yes, angular uses {@link http://jquery.com/ jQuery}, the open source DOM manipulation library. +If jQuery is not present in your script path, angular falls back on its own implementation of +{@link angular.element jQuery lite}. If jQuery is present in the path, angular uses it to +manipulate the DOM. + +### What is testability like in angular? + +Very testable. It has an integrated dependency injection framework. See +{@link angular.service service} for details. + +### How can I learn more about angular? + +Watch the July 28, 2010 talk +"{@link http://www.youtube.com/watch?v=elvcgVSynRg| Angular: A Radically Different Way of Building AJAX Apps}". + +### How is angular licensed? + +The MIT License. diff --git a/docs/img/angular_parts.png b/docs/img/angular_parts.png new file mode 100644 index 0000000000000000000000000000000000000000..a7fe59f2f2840a6c4b8a311e715646238bf50293 GIT binary patch literal 54347 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

*DG?aswm^!^1bs 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 literal 0 HcmV?d00001 diff --git a/docs/img/helloworld.png b/docs/img/helloworld.png new file mode 100644 index 0000000000000000000000000000000000000000..957ce8e98b5710ee019feb4a382858ed24fef5ef GIT binary patch literal 11736 zcmd6tWm_Cw6Rpv~-3BK>@F2kkcMtAvf#B{A!GZ>N53WH1!JR;W;O_1W?r{1!?=Lvt z&Ro~f12oO<-g{TAbys~;QIf$xB|(LOfx(cIl~jX)fsF$`yCcH^U*{wfq<{m$7coUK z7??$P@j2xJ;CmD&SzT8c7&N^9-moy4*Qp+6F!|BOWx)AJZgPrJNK42lcr2{LaYsimFjO#dl42TO*{6mm zeu^?r!o0p_v45B%4Zr7C&+Qi>7u%e67Hc;B(&(B}(`ag)uz8beDr~Iy#fop(s3-8@ zLzIr0oLvHyn1|fX;EM=fZOriE*>9Y!lB?&-Hoh<8?VRVM8Fv|XISsl>IsCiZ+pfDK z1X*KrD9FgjEAn+ZEUc`o4-XFxxw*Mol}+t8IM~?O6EFr05H$w}2iD#UTx{%?0oY6z zMn`f4;C0fc=%on<2iGjTa*Y|(i;9LeJw1JQvY3>asi&e6BjWDwv!u)$z38QIDHe#G_F{=YmS-`kbnu8^Irt*J(9b!b@b zea}}UIY9mu-R{?*Ir#+iipujq!DCHl*>xh?U5Ab@_n}aqhwdc!7bpf39y!I zHHnFdFD@=j7@RN!NuY2CMOHX#1I5y@Bt}L?Yin!C!3>{11Y93X=I2vk$2P||XH`}< z)nUKJS5{`RocWI*lYIn7($mr!RIYC6nS5wbvvPHJzNy^Y-#$%BOcW>P8bCxqV4^UP zi6tpk3R~VfIwHZv-8ww{h9QSJ(ybNww{CN9FT4f4jgOCS1FZ?-$GTIlSxMO6AQbmi(q+gXs;3`T)|8ak?jzTLDg=+7@kbl}YOS8zF_TAvn6g3e z^Rpj9Oyv9HnR4}$T|V^A&BlV7rB4(x$6Kme7N{>{^I<*G+w^>V#H{Tml`f$k^KByx ztr>=v%!Azh_>zRlGU{Xx?~e7*&B)}0FGLH_nGEzx&03r`Z0Vgjw?TaWviYWe$l=`w zX^0<&v&nJj3Wd*(_GQK95+A1&eJ{=>dR+hX!qE{H9(0cftft?)uODcw$}0G@rENiBqT(BKON10zOfutSk}RzCNGb265}e!D_0!! zc^Y5FB)+Jzt{A%%oi@%cb4#;QtHbROw=#!bo|;isjBGKcoJmM%b$z|daxAmTNalCQZECrwyQO)W7o5jDD0!dz!(7pEUjSUAOI?z+#;URqvs>Z)QQ1;R|k zYS0Z*irHddp!)CugZP>nf^A@8vM~@%G`sZ&%b83Zq^CPyMJ}T%ATEfze@G`FKpOE~ ztky$ZS{ihz!Xn4`tcSwWt!{3tx>okn?jee}!7`pq_)~)MB*GZ+@+kVhwDPn(zW68~ zg2x6y%c-zei$akSdvqp<7PO85htmvrd3jAA%_{!ZE8BGm2#}Wc(eruyX+GrV=f|EE z6*+~z6K%t^0i%Q>UI#>)uUZ=$JNx^62|XYyxNi{6KUBkpwTu+FxNsuGc$k-8vo0-6 z;M>Z}%OR4U8pJbkOyBX`6CgH2AP+e~Dk@Rs6}sBaK5gw4s*!LyWhbKPDb9}#3zTYu zozGLFx(x&m1V=w{6O)okmGf$p=D!+cWbQgH|FYj5Nm+on?xD~29y_XMl!>+GzWPzj zTu#bRGUAtjGAAkHZci2)@&aEU78Z2I0vPaKh}ewUzx<#md8+=5@b~_}ar(s|~PR7cF_};P%a!8;4cHI{x zmhFFc(^!O!MEp)%vJSLJOT5tS@D+sN^rr^0fJ#unKNDB+E)JuDJR)X5%m$g_FdUR> zHC@Q0hiV>}jO-Zwg;_j})ll!3-D05>+Gr>a4$i{aVgo(@PQyRp=^10DPSkhK(QcyW zYaRPzSwkM@t;aQ#0rz4J1Ogr>_c!y#KgF6BPBJX6_QskW*OekB6gW6IlIi*ReWptk zL90?5%e^y$j1q;;j(B_HIcT`VTvpgu5d6Bzt_(qDttyBYG~dty{m~c;1qJ2V-g7}Z zN{{#c5Ud9_Nk)!97F#LrR|mZhY7E=(x6(INYeQ1-ZSj&BIA@yNk-VH6_D55qQg16i z`I%qt$l>XZH`&e;TF5G5prL*3QZHAVltkU0nGSt#qnC40vxRNjIp#!Os$Qx@%Ikn| zM=laT)`+=8!tYi#Yx8nk+a>(=?7F?Cb!=@U0k=>W`1V?@*EIFl&V_u$p^H(e(%JQT zL=~p0(RC=!90i43z#Wb_xRl3!B@!7%EnS!3@#*P_#-j)pW~NH_>iTf{=9o0)ZR9W8 zw&xNOW!WsWRu_*R?fOfz)SHVHQV_b7Ex#5sStT4W!>m^Ur-cUn(Yf7>EE>j?jfdWv z^Vv-ExkBgWfsm*kn-V-C79E&)kONUTONxm5(ac=6z6i7%{_XiHzR)NuZme6cu&{9H zm;KXO+qq4rcqRf)9JlQp`fPAGcKj9bS?80(W$x?!HkOy)hPs@`7&Q%zkf7lAhu{0T zwya+V+-Rg@?st-u`GGZXyX@GY7c^U`O|yL3ygp7QY80sQZbSwY%HF@hfIZuByJXuJ zjlV_kQ04tncUdydL-#Yx)8#Z<^hM$s&>0dzw$4qv;&AU9YW6f`lLR zxIX{+4v3g-UJj0gxXzn7eHxj#=c|7rn+U{pwfZoq{b0j*EaTVa@y=g!J~tch~w!9 zCkLaI&ryCx^@xs*MI6JR6ecU(3w(Q8w{KqMu^7Q8bWfC5%;XZw%UApH3=BZF#}D2! z{+xrB)v%R|m)CQDJcrW%8fPgzCnxq9%KcsT%iGRy(sL0`=KC+7Kj)hxVUi)2G-Tw{ z3u6hEw+VRA{sJC*9yFSrkP%RUN3bwMQ4R(sZJnK+rAdkSifoBLmKLj(9y`le8g_Q4%bno`tEEQ9j%QmSNS2Yag8F+% zHZYZym4%^pz}@Ew`^#qgQSLnKrWsdgR{nB7o@;F6YC(6ZopG<$`B~_?Kkg<4w}!xi z$3avpx7zA1hG5caJzdg64>uo_zV|OLz6hA87n*oMH8~J!&)HuWjmus%HmZ?5+r?(b zytFi;{(=u=d2C(JQ-g>OX>7*f97U+tq}e1p2!~Wh$&F>O^l)}9HnU7zOpJ_jwL_w; zlarHx+`u5^`SGN1Qo~`Lie8HD_o2MzaZw)h`YREW$Udn0^(yZz=;i=NJDcV!>9m+l z`u77I9EX0C7Cr3 zS$mA+dq^WNDWW?C5ft@*Hr#_Mr%Dt_u@1ED}x(jYZ4ajMhbw=>PF8$%Kwz52j`po8SRb!RnRB z*bg=^menm^S@h8)mUrDxUG1jJd6;K5rf~i(8R41m)$HZu9>Hth1 zd!LELdbviX``n#j z+}OQ8%_#7>Il`m+1T&;rWAN~Eh(g^~z~}m)G}p)GY~}Y*9J%j)j_1PkiC;w0pN*cc zlMLw`^7?fqum@_Z<_pq1k?24yi7Ifv?j|%_-p>mRn5)ut%DGpf37hPTN+ei4{?40| zo-QjWm5U!>Z9(oAYc1jWoS!zHEA-b)G`orO%fDW3bE4!3bc#=;t}UdB;h4m|&0#(3 zU3=yI)0wr7cvL#D|3qZR~s%kps>%^4Q;HAD?LoVNt=eyM5&a+B4LD zis`3Lb7{W5$}EtQkjM);CT)vBwL5%n&_`loW2K@Q2tjdVd}`G;DRn+K1Yut*7RFFx zDrWA1L_cAJ1AkN??yZ@Tkr5mmZ1W{_o!y}}zPVX>_~(`ipC1LfPbm9dTbfJ#6FtV! zO=5v|eQs`J&$B?=W6~J-z_`Iu(Ok$nZ8flet*?j`^=xg3GH|8QdipC87Vs}|3IFO< z%wuP@Q_GQ_{Pd0(Z-O&rq&-pQF;R||o7onB$tjOGP{8}2fLMGU z{>nFB&QeZlxww4nRU;H#eSGY5UTgDobaG<%jl{y?5cENK1??VeesY=0XxQ(bFaG|* zo4=((u!R;1Z)$34dB#rFJzV;Pdy{_`6Dh$k;IsGvv7ieUpd4ZODb+f`rMPkAZE98+ zD3~>elp7QJ5_ntNoDKDvT-It@t(xpQqk^jL$6pO9{``^kniSOJYYlJ~Iwtqog|^`2 zCQNjZ-TeFeSHNilhFWY-$Mil&B#=Uh+OLK=&Z)380!duyr&e(UYQ0ui0uC;22qcdJ z>oY?o)qv_jO5a;%xxztU^s(}}Krgf?MF96AO%=5%!vW4lBa~>D>bftxL`S8$oGJs1 zRP04WR%~gJHOFmoRo~v~;g0uze@UPp$jhBXfRCTe=Sn9cvVO+R zoy0KkWqgJO&CAOxG(5b13g5d*%htukW%5Js${57Q&i*^5mygesrj(*b>8q;7XYIhR z89%BXbw%^r^Xo3ueATXnv@Q4iC=}%7QQ5Gr1pMxuL`7kI3BDD5s>+9-kjW4XMhOwE zikdo_tsF9H>#6kL`I7*s_L(x(z73&uN|>zI_mh|HDjbn%md#_KuB1DCP|G+ ztllP}%~eJ%=Z-n5K|37(ez3ov%X+GRgJ2ImuW_Z0l=$J^# z(Bp}jp8g9Ug8^qI4w+;JZuNh=maDARZx75`J*DH(H8xBmL+TC>r!#8~S_X_AW{Cd>%w?7Pp6%mvH5Nc{OKq+}} zHdsQHH+KvK{K+Si5wSK!B4i%E zBkEc>R6RUuwUI~ucC^4vWjP0}^3xU>UX~JegfVmmnEHl>hV8Ab1LhXg;@RB=P20EE z7a;BPd0*}n#S6<*27QDN%k{Yjh6!Z(I;%-)Z0cz|`pYcG&fiz#0x~h+0-1837ZW1= zUv|H}F1EJgMFRc_-A$wgobrSsU7xIV__leRZp57~{4@uW-^{;A289bcgZsoI`l-9q z<%q;F+Eh3zZvO-gta){uJs6)(YHsdXfN(xXzst~yLroWAQeI4Qe*8EKfb=Q8a{cyxA*h}h zh4%rL0LlGNdyNc8$TJDM1b~m=-LqtE;+R+I zFI!g(;|i#IL^IUO-aVtGT;ua*ZY8_R#!IV*}jD(a z|31;|XsodW$TNUTw`iY8=uq7OYIBNSil8)NGhXDin@e=LprBwVo^pPA3_alaLS`T% zL*nGzu%0o{K(AYBI^OH=!4e4WnM$}l-{njPX8xE&sEK}Rx1hn zZ5sv2a6nUi0G7r|i!(e3-DLjk`d&tjxFuRH9A23tu)<-r6-snav<#YHR>w}M{!1$G`DLZd`W!%$_Bmup~wz5=Qt(@9oI zNednG{u`F?y$PU4dI6}OnA~DJ&-!_9{##w_BH|;o-syvWlT9&H@xC8$KgsaoViO2= z*oK}*GmImk)&Hz`U|=BGBVd{nLiVUqGeiP~B}JpFL_gtz>C+V$vn-`-biuTe-6yhQ zhQAVNYf4tph*C*vzZ`Y{6%V>Fc&ZEG7#BrLKahRXGzqUQE zNrMc9Vt6ivt;6P;%`YisLpb~&udy`m0SIyLZmfl;pI2fS%BiZV8o&ggXCxznVO)Lt z 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' + - '

  • Source

  • ' + - '
  • ' + - '
  • ' + - '
  • Live Preview

  • ' + - '
  • ' + exampleSrc +'
  • ' + - '
  • Scenario Test

  • ' + - '
  • ' + scenario.text() + '
  • ' + - ''); + var tabHtml = + '
      ' + + '
    • Source

    • ' + + '
    • ' + + '
    • ' + + '
    • Live Preview

    • ' + + '
    • ' + exampleSrc +'
    • '; + if (scenario.text()) { + tabHtml += + '
    • Scenario Test

    • ' + + '
    • ' + scenario.text() + '
    • '; + } + tabHtml += + '
    '; + var tabs = angular.element(tabHtml); tabs.find('li.doc-example-source > pre').text(HTML_TEMPLATE.replace('_HTML_SOURCE_', code.html)); diff --git a/docs/src/templates/docs.js b/docs/src/templates/docs.js index ab96a699..e244bc7e 100644 --- a/docs/src/templates/docs.js +++ b/docs/src/templates/docs.js @@ -2,26 +2,27 @@ DocsController.$inject = ['$location', '$browser', '$window']; function DocsController($location, $browser, $window) { this.pages = NG_PAGES; window.$root = this.$root; + this.$location = $location; + + this.$watch('$location.hashPath', function(hashPath){ + hashPath = hashPath || '!angular'; + if (hashPath.match(/^!/)) { + this.partialId = hashPath.substring(1); + this.partialTitle = (angular.Array.filter(NG_PAGES, {id:this.partialId})[0]||{}).name; + } + }); this.getUrl = function(page){ return '#!' + page.id; }; this.getCurrentPartial = function(){ - return './' + this.getTitle() + '.html'; - }; - - this.getTitle = function(){ - var hashPath = $location.hashPath || '!angular'; - if (hashPath.match(/^!/)) { - this.partialTitle = hashPath.substring(1); - } - return this.partialTitle; + return './' + this.partialId + '.html'; }; this.getClass = function(page) { var depth = page.depth, - cssClass = 'level-' + depth + (page.name == this.getTitle() ? ' selected' : ''); + cssClass = 'level-' + depth + (page.name == this.partialId ? ' selected' : ''); if (depth == 1 && page.type !== 'overview') cssClass += ' level-angular'; diff --git a/docs/src/templates/index.html b/docs/src/templates/index.html index 538be297..63e8d871 100644 --- a/docs/src/templates/index.html +++ b/docs/src/templates/index.html @@ -3,7 +3,7 @@ xmlns:doc="http://docs.angularjs.org/" ng:controller="DocsController"> - <angular/> + <angular/> @@ -25,7 +25,7 @@
    diff --git a/docs/started.ngdoc b/docs/started.ngdoc new file mode 100644 index 00000000..f5acc809 --- /dev/null +++ b/docs/started.ngdoc @@ -0,0 +1,122 @@ +@workInProgress +@ngdoc overview +@name Getting Started +@description + +# Hello World +The easiest way to get started with angular is to create a basic Hello World app. + +# Step 1 + +In your favorite text editor, create a file called helloworld.html. Copy and paste the following +contents into the file: + + + + Hello {{'World'}}! + + + + +# Step 2 + + +Navigate to the file helloworld.html in your browser. The page should look like the screenshot +below: + + +That's it! Now take another look at helloworld.html. Here's what's going on behind the scenes: + +
    +
    +
    + +Defines the namespace `ng`, which represents the URL `http://angularjs.org`. You must define the +`ng` namespace in your application so the browser understands angular directives like +`ng:autobind`. + +
    +
    +
    + +Sets the `src` attribute of the script tag to `http://code.angularjs.org/angular-?.?.?.min.js` to +bootstrap to the angular environment. Uses the `ng:autobind` attribute to compile and manage the +whole HTML document. The compilation happens in the page's onLoad handler. + +
    +Hello {{'World'}}!
    +
    + +This is the template that describes how this element is displayed in the UI. +Uses the double curly brace markup (`{{}}`) to bind an expression to the greeting text. In this +case the expression is the string literal 'World'. + +# Step 3 + +For a more advanced Hello World example that demonstrates angular's two-way data binding, edit +helloworld.html and replace the contents of the `` with: + + + + Your name: +
    + Hello {{yourname}}! +
    +
    + + + +These are the changes to note: + +* The text input widget is bound to the text stored by the name variable. +* The name variable is implicit in the root scope. +* You did not need to explicitly register an event listener or define an event handler for events. + +Now refresh the `helloworld.html` page in your browser. Your screen should now look like this: + + +Type your name into the input box and notice the immediate change to the displayed greeting. This +example demonstrates the concept of angular's two-way data binding; any changes to the input field +are immediately reflected in the greeting text. + +# Anatomy of an angular app +These are the 3 parts of an angular app and how they map to the Model-View-Controller design pattern: + +# Template + +Templates, which you write in HTML and CSS, are the View. You add elements, attributes, and markup +to HTML, which are instructions to the angular compiler. These instructions are fully extensible, +meaning that you can build your own declarative language with angular. + +# Application Logic and Behavior + +Application Logic and Behavior, which you define in JavaScript, are the Controllers. Unlike +normal AJAX applications, you don't need to write additional listeners or DOM manipulators in +angular because they are built-in. This makes your application logic very easy to write, test, +maintain, and understand. + +# Scope + + +Scope, which is a JavaScript object that has the ability to watch for changes and get notified of +them, is the Model. You typically don't need to write much, if any, additional JavaScript to +define your model. + +Additionally, angular comes with a set of Services, which have the following properties: + +* Useful for building web applications. +* You can extend the services and add application-specific behavior to them. +* Examples include Dependency-Injection, XHR, caching, URL routing, and browser abstraction. + +The following illustrates each part of an angular application and how they work together: + + +# Where to go next +For more hands-on examples of using angular, including more source code that you can copy and +paste into your own page, take a look through {@link cookbook}. +For explanations of the concepts described in this example, see {@link guide.bootstrap bootstrap}, +{@link guide.template template}, {@link angular.widget.HTML input}, {@link angula.scope scope}, +{@link angular.markup markup}, and {@link guide.data-binding data binding}. + +To read about the HTML compiler and the compilation process, see {@link guide.compiler compiler}. +For more angular concepts, see the {@link guide Developer Guide}.