From eda8c934db602268fbd792af0ede431a869e8a5e Mon Sep 17 00:00:00 2001 From: Shane Logsdon Date: Mon, 15 Sep 2014 11:30:01 -0400 Subject: [PATCH] initial commit with yo gulp-angular --- .bowerrc | 3 + .editorconfig | 13 +++ .gitignore | 5 ++ .jshintrc | 25 ++++++ app/404.html | 157 ++++++++++++++++++++++++++++++++++ app/favicon.ico | Bin 0 -> 4286 bytes app/images/angular.png | Bin 0 -> 13522 bytes app/images/browsersync.png | Bin 0 -> 11615 bytes app/images/gulp.png | Bin 0 -> 10678 bytes app/images/jasmine.png | Bin 0 -> 15828 bytes app/images/karma.png | Bin 0 -> 10130 bytes app/images/less.png | Bin 0 -> 14221 bytes app/images/protractor.png | Bin 0 -> 10186 bytes app/images/yeoman.png | Bin 0 -> 13501 bytes app/index.html | 64 ++++++++++++++ app/partials/main.html | 39 +++++++++ app/scripts/chatblendUi.js | 14 +++ app/scripts/main/main-ctrl.js | 59 +++++++++++++ app/styles/main.less | 116 +++++++++++++++++++++++++ app/styles/vendor.less | 1 + bower.json | 22 +++++ gulp/build.js | 96 +++++++++++++++++++++ gulp/e2e-tests.js | 36 ++++++++ gulp/server.js | 63 ++++++++++++++ gulp/unit-tests.js | 31 +++++++ gulp/watch.js | 10 +++ gulp/wiredep.js | 21 +++++ gulpfile.js | 9 ++ package.json | 43 ++++++++++ test/e2e/main.js | 15 ++++ test/karma.conf.js | 28 ++++++ test/protractor.conf.js | 21 +++++ test/unit/main.js | 22 +++++ 33 files changed, 913 insertions(+) create mode 100644 .bowerrc create mode 100644 .editorconfig create mode 100644 .gitignore create mode 100644 .jshintrc create mode 100644 app/404.html create mode 100644 app/favicon.ico create mode 100644 app/images/angular.png create mode 100644 app/images/browsersync.png create mode 100644 app/images/gulp.png create mode 100644 app/images/jasmine.png create mode 100644 app/images/karma.png create mode 100644 app/images/less.png create mode 100644 app/images/protractor.png create mode 100644 app/images/yeoman.png create mode 100644 app/index.html create mode 100644 app/partials/main.html create mode 100644 app/scripts/chatblendUi.js create mode 100644 app/scripts/main/main-ctrl.js create mode 100644 app/styles/main.less create mode 100644 app/styles/vendor.less create mode 100644 bower.json create mode 100644 gulp/build.js create mode 100644 gulp/e2e-tests.js create mode 100644 gulp/server.js create mode 100644 gulp/unit-tests.js create mode 100644 gulp/watch.js create mode 100644 gulp/wiredep.js create mode 100644 gulpfile.js create mode 100644 package.json create mode 100644 test/e2e/main.js create mode 100644 test/karma.conf.js create mode 100644 test/protractor.conf.js create mode 100644 test/unit/main.js diff --git a/.bowerrc b/.bowerrc new file mode 100644 index 0000000..5773025 --- /dev/null +++ b/.bowerrc @@ -0,0 +1,3 @@ +{ + "directory": "app/bower_components" +} diff --git a/.editorconfig b/.editorconfig new file mode 100644 index 0000000..e717f5e --- /dev/null +++ b/.editorconfig @@ -0,0 +1,13 @@ +# http://editorconfig.org +root = true + +[*] +indent_style = space +indent_size = 2 +end_of_line = lf +charset = utf-8 +trim_trailing_whitespace = true +insert_final_newline = true + +[*.md] +trim_trailing_whitespace = false diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..7911b28 --- /dev/null +++ b/.gitignore @@ -0,0 +1,5 @@ +node_modules +dist +.tmp +.sass-cache +app/bower_components diff --git a/.jshintrc b/.jshintrc new file mode 100644 index 0000000..ad9dfcc --- /dev/null +++ b/.jshintrc @@ -0,0 +1,25 @@ +{ + "node": true, + "esnext": true, + "bitwise": true, + "camelcase": true, + "curly": true, + "eqeqeq": true, + "immed": true, + "indent": 2, + "latedef": true, + "newcap": true, + "noarg": true, + "quotmark": "single", + "regexp": true, + "undef": true, + "unused": true, + "strict": true, + "trailing": true, + "smarttabs": true, + "white": true, + "validthis": true, + "globals": { + "angular": false + } +} diff --git a/app/404.html b/app/404.html new file mode 100644 index 0000000..fdace4a --- /dev/null +++ b/app/404.html @@ -0,0 +1,157 @@ + + + + + Page Not Found :( + + + +
+

Not found :(

+

Sorry, but the page you were trying to view does not exist.

+

It looks like this was the result of either:

+ + + +
+ + diff --git a/app/favicon.ico b/app/favicon.ico new file mode 100644 index 0000000000000000000000000000000000000000..6527905307f19ba00762f9241f7eb535fa84a2f9 GIT binary patch literal 4286 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 literal 0 HcmV?d00001 diff --git a/app/images/browsersync.png b/app/images/browsersync.png new file mode 100644 index 0000000000000000000000000000000000000000..201c641ba9cef74994ad9d7dd5dfa2fcbe9ae5af GIT binary patch literal 11615 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 literal 0 HcmV?d00001 diff --git a/app/images/gulp.png b/app/images/gulp.png new file mode 100644 index 0000000000000000000000000000000000000000..5da1891e043759e8a05cdee7a21d52e64b4e4901 GIT binary patch literal 10678 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 S=YM}uC^>0msTv8>u>S`l_)6vg literal 0 HcmV?d00001 diff --git a/app/images/less.png b/app/images/less.png new file mode 100644 index 0000000000000000000000000000000000000000..a6bbde7b52a43c7ee900a868a161942c455e2790 GIT binary patch literal 14221 zcmcJ0^;2BW6D_j1!vc#tEChFg?xI10Yj6qf?(XjH4#7zX9vp%McMBez;KAO0{(|@Y z;k~WuJ5^gY2ZH7rAEs#r^!ELHA~lt&3}_Z_CA#Ob|5)5&dTob&OcD^vJyw5M`_C+KHUP*^OM_ zGl0U`Xc=fus2hSvPfueWn&iLLmfPvB?a6l7C0^6f+0jwc;Yjr1#_zg%-LST%Hel=e z)2|EMVGtq;N+bs$08LO(5b{6R|K#*vp#RD7e{%Z&6Ac;hPn{sx3^PrQb65fuo@Vf# zC*U$b3l|`Ad4#|IH{Iy6(;It7d+Qar={}~flYs=ssYDP{vK=q5DZ!H7pF|^x8!h$v z53L{c4lh(q5C3jwH1Opr8oM2Nb9EH?w9{=#t*r_9@o_x{ao>Ztk#+PZsMo zafD12SlHxuHWFKskIhhr95D>X(=_lS0C}E&$l;Pmdvn7G7WsVO;q$Z5CK2a`ipLmu{Ko**tgQq&ka{_1~C08Gpc9ge!6_w*+Yg-@AJ&G>O(2gVy6?nlSR z(D(UbZLmoSwb13n+-*JmcyKg2o?I+IE0s#WaAp%w7RrtPs*irML|@A7n2xGS3FUURHMkFRi60lv2Vr#==za0 zKF@+pI}wn(;CX>H5M%<%67zr0Z?_Bw!A(+R{IvmIG#;girUgn@uRfcX%K_V5l~I|; zc`[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 literal 0 HcmV?d00001 diff --git a/app/images/yeoman.png b/app/images/yeoman.png new file mode 100644 index 0000000000000000000000000000000000000000..92497addf96c5c009ac24007f55eb989f3bf74c6 GIT binary patch literal 13501 zcmV;uG(yXXP)X+uL$Nkc;* zP;zf(X>4Tx07wm;mUmQB*%pV-y*Itk5+Wca^cs2zAksTX6$DXM^`x7XQc?|s+0 z08spb1j2M!0f022SQPH-!CVp(%f$Br7!UytSOLJ{W@ZFO_(THK{JlMynW#v{v-a*T zfMmPdEWc1DbJqWVks>!kBnAKqMb$PuekK>?0+ds;#ThdH1j_W4DKdsJG8Ul;qO2n0 z#IJ1jr{*iW$(WZWsE0n`c;fQ!l&-AnmjxZO1uWyz`0VP>&nP`#itsL#`S=Q!g`M=rU9)45( zJ;-|dRq-b5&z?byo>|{)?5r=n76A4nTALlSzLiw~v~31J<>9PP?;rs31pu_(obw)r zY+jPY;tVGXi|p)da{-@gE-UCa`=5eu%D;v=_nFJ?`&K)q7e9d`Nfk3?MdhZarb|T3 z%nS~f&t(1g5dY)AIcd$w!z`Siz!&j_=v7hZlnI21XuE|xfmo0(WD10T)!}~_HYW!e zew}L+XmwuzeT6wtxJd`dZ#@7*BLgIEKY9Xv>st^p3dp{^Xswa2bB{85{^$B13tWnB z;Y>jyQ|9&zk7RNsqAVGs--K+z0uqo1bf5|}fi5rtEMN^BfHQCd-XH*kfJhJnmIE$G z0%<@5vOzxB0181d*a3EfYH$G5fqKvcPJ%XY23!PJzzuK<41h;K3WmW;Fah3yX$XSw z5EY_9s*o0>51B&N5F1(uc|$=^I1~fLLy3?Ol0f;;Ca4%HgQ}rJP(Ab`bQ-z{U4#0d z2hboi2K@njgb|nm(_szR0JebHusa+GN5aeCM0gdP2N%HG;Yzp`J`T6S7vUT504#-H z!jlL<$Or?`Mpy_N@kBz9SR?@vA#0H$qyni$nvf2p8@Y{0k#Xb$28W?xm>3qu8RLgp zjNxKdVb)?wFx8l2m{v>|<~C*!GlBVnrDD~wrdTJeKXwT=5u1%I#8zOBU|X=4u>;s) z>^mF|$G{ol9B_WP7+f-LHLe7=57&&lfa}8z;U@8Tyei%l?}87(bMRt(A-)QK9Dg3) zj~~XrCy)tR1Z#p1A(kK{Y$Q|=8VKhI{e%(1G*N-5Pjn)N5P8I0VkxnX*g?EW941ba z6iJ387g8iCnY4jaNopcpCOsy-A(P2EWJhusSwLP-t|XrzUnLKcKTwn?CKOLf97RIe zPB}`sKzTrUL#0v;sBY9)s+hW+T2H-1eM)^VN0T#`^Oxhvt&^*fYnAJldnHel*Ozyf zUoM{~Um<@={-*r60#U(0!Bc^wuvVc);k3d%g-J!4qLpHZVwz%!VuRu}#Ze`^l7W)9 z5>Kf>>9Eozr6C$Z)1`URxU@~QI@)F0FdauXr2Es8>BaOP=)Lp_WhG@>R;lZ?BJkMlIuMhw8ApiF&yDYW2hFJ?fJhni{?u z85&g@mo&yT8JcdI$(rSw=QPK(Xj%)k1X|@<=e1rim6`6$RAwc!i#egKuI;BS(LSWz zt39n_sIypSqfWEV6J3%nTQ@-4i zi$R;gsG*9XzhRzXqv2yCs*$VFDx+GXJH|L;wsDH_KI2;^u!)^Xl1YupO;gy^-c(?^ z&$Q1BYvyPsG^;hc$D**@Sy`+`)}T4VJji^bd7Jqw3q6Zii=7tT7GEswEK@D(EFW1Z zSp`^awCb?>!`j4}Yh7b~$A)U-W3$et-R8BesV(1jzwLcHnq9En7Q0Tn&-M=XBKs!$ zF$X<|c!#|X_tWYh)GZit z(Q)Cp9CDE^WG;+fcyOWARoj*0TI>4EP1lX*cEoMO-Pk?Z{kZ!p4@(b`M~lalr<3Oz z&kJ6Nm#vN_+kA5{dW4@^Vjg_`q%qU1ULk& z3Fr!>1V#i_2R;ij2@(Z$1jE4r!MlPVFVbHmT+|iPIq0wy5aS{>yK?9ZAjVh%SOwMWgFjair&;wpi!{CU}&@N=Eg#~ zLQ&zpEzVmGY{hI9Z0+4-0xS$$Xe-OToc?Y*V;rTcf_ zb_jRe-RZjXSeas3UfIyD;9afd%<`i0x4T#DzE)vdabOQ=k7SRuGN`h>O0Q~1)u-yD z>VX=Mn&!Rgd$;YK+Q-}1zu#?t(*cbG#Ronf6db&N$oEidtwC+YVcg-Y!_VuY>bk#Y ze_ww@?MU&F&qswvrN_dLb=5o6*Egs)ls3YRlE$&)amR1{;Ppd$6RYV^Go!iq1UMl% z@#4q$AMc(FJlT1QeX8jv{h#)>&{~RGq1N2iiMFIRX?sk2-|2wUogK~{EkB$8eDsX= znVPf8XG_nK&J~=SIiGia@9y}|z3FhX{g&gcj=lwb=lWgyFW&aLedUh- zof`v-2Kw$UzI*>(+&$@i-u=-BsSjR1%z8NeX#HdC`Hh-Z(6xI-`hmHDqv!v)W&&nrf>M(RhcN6(D;jNN*%^u_SYjF;2ng}*8Ow)d6M ztDk;%`@Lsk$;9w$(d(H%O5UixIr`T2ZRcd@+Z=rn|HO+DhmlDBoIatm|!fhjg2uGWbhq^bHc!#?=WDTFl)@& zoXIx9K5)SQ!vZ-`+^PLI8p92OQ1A>zw`vN^+*z2hG=X5&#Fe>&rmC1NA>41U*ojHR< zgOq#|l>0v1#9Yb4KhU2>MZ(pU7gz>5?onTP-Bldj7cMnQbGdKxy(WEeFN*b^@*Q2=Rr-b!~{4F zVKSc5dO*Ow%(@ZlaF!{Hl#aKT-5Tr+q|2-P@lI`aU5b(fP>VlQ*%fH?RyY#TJ7OIe zipa&CK)Xk$QmIwQ9#p48i;iy0ovEYJs%?u#>Cm)A=D^CE4~?w6`8Uy^wJxL?n_{W( zroLCMT>t`scjvk4?Lwzxh3qGpo`MTtV%+Vt$BDCFCa%-I@+jh?0%Q!=Xsu4O23Fqm zEimEsqOy=?#uAb=H3=0-QO7$QFGXkGXy_>?Gfb3e1Hne4f37N1(mWaszMnPlOz}@_PB&u?~vqutC(U`D1(sF{{XPz1Jo&4l@VtSs7kX7QbG$%xPBPg ziFKLC>f389OYTf2xc)-D>4w;St(xBUmbR;{^%wV?|72;^nGe3kx@(f9%2I>mtRt5Y zG2m<_=5y3VKDbgar5hzWV06(ZgZyyJ&sQ%e&0srd&t;A~Igq;l;C;`?eeL3|r@uKS z-PbiRanZwZ){U&Z>6W6hqHjlgV`+iJX#K5P|F-23Pq6BW@Z6I(nTfz`ZnU(7NTSWq z50yk>o2ulP^1Bxwy_CK5dEYyMnTKTs>&lv6UYqLN@#AFkTQ83NmuDB+>+h_LBobSE z9=$AWX_mx#^~jc&V&0nB_XWqzI6N5C7m5xchNwk*BR>m&?CS5&ojLC8cQ&=%GGNFQ z(20|LFH+87c;qIlN@{Gc#KA{D*wLkBZ3}c%i)TRsS`Abi!XQ%52U<32 zDH#K%OtSqr<;+M4Xx#&4Mn+v_RY-@HmMOLm_Odb=hma9CG)ShjX=&eoOJ@Z#yXRp~ z)sWp=4JkX?kr87~ef_%ZjMI%zb9IP--kPSXqZY{1iIfV#I%9V465AWLi)yD&6*Dc- zflS6qB|OZvy?zSLYhu9PBVeQU`wX1+DK8(K{PIVFgZmNfIw0 zixwj#)-8_U=)#bh_|G)GaN(iZL0FnHhc$mF9Sj7*Eb#gPqLR$440Yr{t^g__by1t5h-kF>`YqMJeceL5Q<kN}_*h6Jf+eoV zhBy*g9zYkM^lUjw!jFI*$D+t$;JF8fp*JGT_9#6>J?gNhKJRl!9`0D1C7e%N67R=6 z)^wj;I>GYT@hOrRsLI$laker@1!FXw`Oxl-_R~vV((bSC)B>K2p4i!->AO~nC*9L{ z5@_H?Xb)*BH;%}y9Ny6xtxmVYtEuY51ZNj&6RHtym|BDaEX6WOe)iv z@)^E(+hz%c7QiO*h#n|{IDp(>%<7dZvE5Ti~$RZAVoNM0F%=42|FxtNKYS_m5;h$ z4y4TNKF7O#959WW1eBc~&+ih6#2BEy0u1WGsr63~<{IRxIs^+3BgUNEuG*$t9_x$E z3zdWpvd7Lyr#c$-R9BPXEguKrNlARiYVoGJZQUCHz0B{R?yv4x2c4@ zMf{2BV?#gOx+P*)mucEUyU`ATETB0xRTfZ_$8MlIHk`K1Lso;qLLze^V{g-Zh7mH) z>X!y|sGO{Uu+lEc!J+dBQp%9&0bN@Yj$2kUw6Bp)8-N9-X+}``dW6>^{3ya)Pq~X8 z6<}9K6x_!F(RH_t!-?jfL#3f(#k6Ihr`NVqG0jRRMf3Q?C@Qn{o*g(Lc)!1GXa&F;YLk@++MS{BLaLJ;4r8a2#<@dyyYuc zY%cQ!i{@ouBp5nQcCth_Llb6rI%Bb`Mc#fn^5)I|8SRhWGI`2GY!lWEgn9bzY> z)E!1WOs;JY4&6xHR;m zXn%}@awQf(^lFLiuYn1EE!o)xYdk1c$z-v^<6u|W66@=e<}KT# zc>EM8D=!wmPZtnRUU=kha>#;tGH&t&NkJ-nz`1Kjvut>Mg`9Bq=^#AzL`f42jYwb9 zHmRL9S;FPz%EZtkyF_Bmc9GYs4aC!JM!4k2>N6f}S&Tzl7&_F0e2l&X?pWZdL3{wt z)td+w23#T)1Uoc|y>w}IhG8Tdpd-jJXf=0Ez`nMiyi!T<$kxq7)Uvy_@JWKiyZfbU zL!+(Xf!w6yXG&m9wb*7xJecv76DLAF;k+4m(&>yeuHU4jqjG$$6jxP3Wu>9|yplGt zKT7SA_Lf~TZO%-o0Nz@xIf)q)C6!1@u((K_jwj4M+0n2~^JL8Au_1rT0u=e1D z8@_?{qecRyC9>-IS6~>JI5~y2ZDE0jkJTRgE595(Z;mAUqgbn`?yw=nW7u@sbnG@D zL?f;Z$99;)PV*<1`e4q_Aw6e6jh=_K=YC`tRC)@^91IT6-0HE+i?RKlcTVm7IF2Hx zhs9e_tQCR6ej_dIosouA;Dm;WU%m~`eO5J*C{6bqzdWobj_usppDvwt81}6^xxo<) zEVM{8Ax+Jl($?N5{R43^v7q~*!eZ?mVy#{$6=P~3IZ%I4VcqR*q7_$3+f#2y5~|Md z7!ocDNKH+tjIAz{a2Un~t+kLY>!_(!EJ{7 zIvkn9^nyV_nS)+aZJHY@<{Vx0d}?;@^GVAyJ?crH73)sVFI@tjto?>~F`f{9ZHur_$Xn|M4aOJCb4&po|DRzA5JC(zm5ASp)R zDotHeOE*cRWrqlD`6yf)9D$O+U1TNPk)N9*C!czhe0;$S@!>gW&GhkFNx&cIjwGAP zYD<4AvK*xr!fdXGufUa(-$8vdSr%dJlAbeU6-n>Qv-A?B(v+0vnQm@%soEMKDMzvQ~rmic4>cp@=ZAy zl}aat#elTnk%Wsv@FW$}7-x2{+>D*QVok!M8LT}9=mv9qupG>GtTh?w-##E)kb34R zhs#A@7;jIl@${rj?RB3|zqI_U#~Rh+bsR|zR?Mm}#%IGQSOfKTv7_2J!6{uM4uxcn zx?76|?2R((nF{fI28WS}vY-*@E3@vK*1GoVn}2bNe|q=PY0Y7bJ35y^jNg9Ip;x~6 z^-_?V-&BPoU(Uq(LzP%zYB>ATVd9gLRN`ySMVeQ{L4J9~?*Cnz*H* zaL*I77J(W*B8J}Ld9>gpn5sW7oR^)6nKLSa6O;Xk#Z{AohNi>djV1TU7_0%9zA&Ln zMRqjpkb7^xUAFJsA!%H{F>o@<{Cq%0E4+|7v?GZ~>cKO|2Bx5F#_7lKYHBirF)NWV z6)x-)Q0c=9|FdzL zxzcpfN<%C0@k?H?vGWgx!?Ja2k9-Ox&RezuHq{C_1L42mVZt*5Ju>Z}a*0QxPy7hC+KUy>( zr=cG#o=sP#=ghf88u)C)ot?-N>#Uma7)#G=!17)W5dsU9{#UCw7cs76JWclC>?{MT zYt6PkIsLS`^6jh6m5|SrzP^6(1p_#qNl0l)iNw=}+;RJ3^3bCV^08^9>hLs!vp1e@ ztIa2AoTW5FIK~hk0=>HBJ>)NKk#?l1e!(ZWi~rFu3SNc#4E9t@kiMriN>%!xKLwK< zo_}E0$xQJC{Wu*~*E>Mktq5(Bg0qf;H|y|2XWLjQG-*O&IjjXAC%Q7s zz!Xx?#PLeJJC2(**}cuRb?3^dpPMH|;h@AKcsw4BOJ7SXP7TV$F0GV`iX!>WHRs8k zxzpq~*FCKEN8A$yD{x>M#A$(=8a#hhTF*y;z{L|>YT$|`?REH}8wSe408iaDXIS>g zMA@}ML3TFzRmO2<@x@2Wru*H!kkbiwmTISu^PPoj8RvokAJ;tk z_*7HeN6{;u5|)WGr^vjI&y=H&I#?!8tj41N=s!@@z_ARaD!WYZ*^kNRF*q#%BVcN8 z-`OFrzP3qLzP>@4);CIjV?>F9e|#`yn^rS8v;unXp~qTNkFY;=m^g6RHINDKO3pk; z%?h~BL2{l(dUmX;$jJQ^j5$lu;S(_lf1!{2NvY=fp~u$K<7}_D+V*Df)Wx&Rh&*|L zx%~@y%xN{3-67UpwlG|GcYSEpqgUTMc1-E%IBCw{7{^l-%5E%EIOrr`9Z|@kK}inI1t=EL zXv&^W#HRx<+NYxD&6dBh=?C?kqobF8%^{Tmxq*Kw7N z%gZ7=tlewXnxC+W4Vcw8fbOSVhQZYjZQWL;EPfjP_Y!4T#1qMQu@4X9psK)uAq-Jf zu~@hi%B8HLrXy7@!}us0vtIl#DB|%{jP)BDF7ec5kLz;P7_)W*NasOLB9}gb+jKTI zLcaxL&SG>Jrm{SmoV>YG^O_a5$G~QV_s+Q2F<#LJ%me zqX{>49!DZ|I!TvZNDx>EM*tbIN!gtSB)XYSNynCrunWTyg!!yvF~QqelIZW3bUY%J zQw~y>KZdMFL<)3}x9mEzkO}VzZoiHKF22}HaMz)1Yy^J`#vD-C=DIOe8WUJiUPYg$ zff8VtuJbK`3LLET!895`g4fdjCSLtge6ZnH&e*^>szI?EipOQ=Ic`_wV-5-K!PC)j z^;l_sdxb<=R|9JrQsa}Nv4_fpxeJi*N7_(rg=*j`9%I`Yx&WwGzkB;(e~5%nC8lFi z{Muo*>fhcfe$c#vF^3((lA$_2UxJT!*yfkGT5wkh5r9rmPaJum!U1#O_u!iYr((cA z0+ZfETv2oW{7ck{ucd>CkO*vgAVfpyLBfYCE9H=rJ}b%SacXnw!TRJcDgqjq)V#Zp z13V>w*^DcSxP)t3YR$>X-cwL92gbms$P}zuOPqqci}Ri^>|;6`EF>tZtVqS5X%-vL zC2gYzbC`)a>0uh(ZW1KS|5zhuG`>~HRXe>*193-GCVKGe)n zl7T^WK~H}LgCV^JX@>A1kTBqmT_Ku@XPFkldRWuL(O7Ey)XJ*bPxj-w(_*GvD`mPq=QHJV*j zZ9ieek65{_|B~5$f8XV%`9?k3=c&d0(wIwhPB6UKrGF3pagd&i;p0i30#1>FKwcsh zpe43rfREbfGcSl>& za*Z@*9+x<-lIn7r7W(Vo%=!O{Jz4}034M!XEtg1iL!m4Kb7(p*26N7b&;D~91%rYb z1UbFtKuG%=p$<+0gLaz~oPJdx8yRyB&J#avmB_b^cC7@Ork@KiFlbRrtSEM~)#Xa| zGS9b2=J`!{YmGD_GjSIUnr4H~l9{P3s!2^<{Xh`cKeTcf?tx;lI`Jw&3%Y||^x}#& zNNs<% zQSJ28(lhf_>E~j9)`_^B0zZx2@uBdqg1ZZD9ULchL8S)x6_MzV1}JI4De+a9eYm6c z?qW(cM5)2ufB7Y@B1bTl@6&o@DxR~of?>?#d!auyTBQ+htp%Y`u(U&MVc~DX<-lEV z-N1tX+V~=M9jfFT7fD&&_a!j~C;z*^cD##CO9O_6(oywz(du$f6I!;U7I(BM%u})D z`i=Bwx+GotzcT(&WZnRW_jimx!0Si9uVx&;E*Bhj)B6Q%k(!GF(g{NJ!hIf&vrp%4 zq#aB+949#cW>(3s@WSn8WMMg1;>C?fHDYgqF~7w@!NHj1RbWpMn8fGTSo$&P!5BCz zo{=q?b~&gQuZJ|eA^vApq}uxI}A4%&Vgk}so@w3E;a0kn#~N161eU0YZ8yZKsXyyFf|@K zj~!53cUt3R0v^quX>7wR_Q`fooU@0Oc<2V@r6h^5Sx`*pTcvWC9aP^SD8XALO68%> zy5fu+IzX9=far(t8w0Z5j>)rnM4naOWVPiiyF^Y!{Uu;FZo$dXc9A@Yqq65rP6b;Y zlPPu=wzFT=n*7r>&n;W54AmOd*${P%c)`FWR>2y`gP7|L)j|lWeuWqNA3qp`!%*MS z%rtpM?~|YD9r%ubPf3$opB*JtC}ovkQlmoQPGCchNBJ?hLV|C%;jL{`GO*tILO%IN zTPwKBniLB|roiDG2-9De8_gPE$%biETn&l!U?bawZSwb|GIfGh>N`c=c?Ly3i^>Fc zBP(AjTG*fc!5of=0zt}79HSe{+6{ZcMRrO0o8}nrg`Vwrc5ULLLKb?$hEg9%qNA#&DN&izK~x?@XyL5-J}s zofZW@3_5vc9e(>U zY5a!n+hJJ^JM84AQ7j5K>Wo2~ia_-D2arbI`y}23K{;x% zR~DE^j?yuc&V!S zo#zv?ZTp>Fpu%sTM?wJ7fv@LefxapQAMb#uMF}5w!MR+@ z#x*X>y2dHE-x$O8-QGHV*>B#vL@?y5cu(LqYz&Ko=nnQgn6)O=3i@i`gLek5TNzS< z>sIBZh9tWTIq&NU`Qj;YJWxX^iUr86Mh1Sc_9M>*&Yc;;hDcee=(&ccy$2A3Sg zoQTu6Bske^nJpR1x&$?!fFtY|RhDf!`%9u62tc(#vVvUl8(e7mN0}`*^lJ9SmuqF7 zW2|CWXa-*Bur&i$%_Nk{?Qu>WrTV|)7zH^=>bq(3WOwxpFBHez41BE#x0_M2_ z_NlqoGXD+!ogI4W%B^*DMX2MC}FB(#E0ipI*@9yZ^@t zpB0@So@d!V`MPEA)cWl6@rk0zI^G2~bYm>kW|id`z!RW9ZZcE1qQWLHhQPM>%le{P zANF$~F~{wiD@9bf4U4VFm!RCP1HCUm{B#Hpt|j1Q1?a75>WL`sA$Y+IT%s+deGNEf z2Hs2Cj5yC~F#n^mtoGLMWw)(XreUjQ{~1%^Arx&^6|yRf96ewd!+srz%wfM=DKgGO zfNSlCHK1-YM;i=^tc(h{4_I8_AR^smscF(qU zZRg$3$Qnq~a$~?;1}1M&f`tOOA!ICq57_T2EZdC_=Pz|t-idVK$!b4338JH(w9X!n z?-JpP_MBSv*FtDh`8LmnaG((U_5sg?k#_KokHWDr9_limoTeGda(qff z6P9@_!+e^=Za#tvScmz<%M*OpjAfc@LL(^ExB;pz6ygsK^&sBHLmw*$_Cd!Bh9*c^lta2;@MPMBrC?9^qNjdHE<``}nN zljBT;6L<>R90&xau?~O)An3@u0&W8wapt;hz*&bf&Q_Df1%K+m+X+YfQQ&+;rDlmo zLJbEJgWtvZ6v}ryj#svLAB~{$T_5>>gkv9iobl{Jn5H_xowN)qy1}nNKKrBUz<&j4 zxGJQ;9V6+x!YM<1q$A7!$tmaJ8q$E1hgJLd*K@3mchLSw*)tEV({m~-3ff0?VMfwyPq#0 z?JEdxhkq~p2jKpS@~l?{cM~^&IXZZxM?W=Ak*Mq!-pnAi3FSVNQ0ys8!r<2dd=!n=I&^Y9?3}1>O zRKVe4newT+=D|_o#=zkxRAF7ZU7Q{ zF#I&!9Zng=h#Y(_(KWQ!gmNp~JcKWUBjG=jr>;wjN|u4UnPuQ#%s#;L91jv*)j%CU1^V_Qw0#xQeh>Ey9M?1&0pA9G z9+WP^A8g%%G9<=seP>w!^T@n!pw4*U-HQ4@!ur9#h)4~;Cqm9w&TP} zOu|?vetR}LM5VY)4+0ORhW(-iO6iZn(E{y)L##lwgHuSD%$xA@@yCik@sWNh`vw0wIIcO5I%Rfa z&Ta`g$k+*rTp5s^0&%9<%*JOT{za&vF6X;1?x0u}S*q+rgb9Zuem3eBBW%IZ&g46o z^N|KmUF4+CyW|%GCw2Q9==84;e+u!Ph~r%-Ydna2B7CYV!i8{D8O6Z=8Q`ixnEf~m zajrFMv2nc`c+Lc#ClDumGaipOBcC7eR-0R-%|(0>;+vpq-a{Ir9EGg3ISQU1X_ z)j_*Yz|C~((4+cv+o9yBzM;&G%mn_E99&ABIrvpMr015uf#q|oMz_x?jum*WV?F_l zn&IFa93#sh?cb4233lt|;#d7aKG$JISC)6mK7cgBZi3>@`fPUo-vAn)fh=5);AifY z1mMLnqYr<^WZSSR2Ff0ca_j^d#yioRB|`xDY}bQX#MwwmA`rJ)K;c({AhR&*sfO^U z46Ig2DOE@t9KkJ%KVRTG1o${Gwx^^Mc$*P!hodOZffThMNW%b8-;6xvnNQrzXa9+x zeN^-Tz9xh_;0SIRwKidV_&anq$Fd!H-N?k1x83^V;#c?-7SIOFnF~4&fR67Vjd@C) zIQa*Jm)l_yn1tCAFmG@9x%G&5IPTp1;o;n}!}Az_ul#&4?d}VWS<%U^5-)v#W**CX;EVD1|<>F<3hR2aK1okDL74wbJ#j&@%A&okC r_B5{HWj~64M1hYe@DT+*>=gL_d-r`<6cl&$00000NkvXXu0mjfZzoN6 literal 0 HcmV?d00001 diff --git a/app/index.html b/app/index.html new file mode 100644 index 0000000..3c158c8 --- /dev/null +++ b/app/index.html @@ -0,0 +1,64 @@ + + + + + frontend + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/app/partials/main.html b/app/partials/main.html new file mode 100644 index 0000000..52198d4 --- /dev/null +++ b/app/partials/main.html @@ -0,0 +1,39 @@ +
+ + + +
+

'Allo, 'Allo!

+

+ I'm Yeoman
+ Always a pleasure scaffolding your apps. +

+

Splendid!

+
+ +
+
+ {{awesomeThing.title}} +
+

{{awesomeThing.title}}

+

{{awesomeThing.description}}

+

{{awesomeThing.url}}

+
+
+
+ +
+ + + +
diff --git a/app/scripts/chatblendUi.js b/app/scripts/chatblendUi.js new file mode 100644 index 0000000..79a4930 --- /dev/null +++ b/app/scripts/chatblendUi.js @@ -0,0 +1,14 @@ +'use strict'; + +angular.module('chatblendUi', ['ngAnimate', 'ngCookies', 'ngTouch', 'ngSanitize', 'ngResource', 'ngRoute']) + .config(function ($routeProvider) { + $routeProvider + .when('/', { + templateUrl: 'partials/main.html', + controller: 'MainCtrl' + }) + .otherwise({ + redirectTo: '/' + }); + }) +; diff --git a/app/scripts/main/main-ctrl.js b/app/scripts/main/main-ctrl.js new file mode 100644 index 0000000..aa161f1 --- /dev/null +++ b/app/scripts/main/main-ctrl.js @@ -0,0 +1,59 @@ +'use strict'; + +angular.module('chatblendUi') + .controller('MainCtrl', function ($scope) { + $scope.awesomeThings = [ + { + 'key': 'angular', + 'title': 'AngularJS', + 'url': 'https://angularjs.org/', + 'description': 'HTML enhanced for web apps!', + 'logo': 'angular.png' + }, + { + 'key': 'browsersync', + 'title': 'BrowserSync', + 'url': 'http://browsersync.io/', + 'description': 'Time-saving synchronised browser testing.', + 'logo': 'browsersync.png' + }, + { + 'key': 'gulp', + 'title': 'GulpJS', + 'url': 'http://gulpjs.com/', + 'description': 'The streaming build system.', + 'logo': 'gulp.png' + }, + { + 'key': 'jasmine', + 'title': 'Jasmine', + 'url': 'http://jasmine.github.io/', + 'description': 'Behavior-Driven JavaScript.', + 'logo': 'jasmine.png' + }, + { + 'key': 'karma', + 'title': 'Karma', + 'url': 'http://karma-runner.github.io/', + 'description': 'Spectacular Test Runner for JavaScript.', + 'logo': 'karma.png' + }, + { + 'key': 'protractor', + 'title': 'Protractor', + 'url': 'https://github.com/angular/protractor', + 'description': 'End to end test framework for AngularJS applications built on top of WebDriverJS.', + 'logo': 'protractor.png' + }, + { + 'key': 'less', + 'title': 'Less', + 'url': 'http://lesscss.org/', + 'description': 'Less extends the CSS language, adding features that allow variables, mixins, functions and many other techniques.', + 'logo': 'less.png' + } + ]; + angular.forEach($scope.awesomeThings, function(awesomeThing) { + awesomeThing.rank = Math.random(); + }); + }); diff --git a/app/styles/main.less b/app/styles/main.less new file mode 100644 index 0000000..11916b5 --- /dev/null +++ b/app/styles/main.less @@ -0,0 +1,116 @@ +.browsehappy { + margin: 0.2em 0; + background: #ccc; + color: #000; + padding: 0.2em 0; +} + +body { + margin: 0; +} + +a { + text-decoration: none; +} + +.container { + width: 1170px; + margin-right: auto; + margin-left: auto; + padding-left: 15px; + padding-right: 15px; +} + +.navbar { + position: relative; + min-height: 50px; + margin-bottom: 20px; + background-color: #222; + + &>a { + float: left; + color: lightgrey; + padding: 15px 15px; + font-size: 18px; + line-height: 20px; + height: 50px; + } + + ul { + float: left; + padding: 0; + margin: 0; + + li { + float: left; + position: relative; + display: block; + + a { + color: white; + position: relative; + display: block; + padding: 15px; + line-height: 20px; + } + &.active a { + background-color: black; + } + } + } +} + +.jumbotron { + padding: 60px; + margin-bottom: 30px; + background-color: gainsboro; + border-radius: 6px; + text-align: center; +} + +.btn { + display: inline-block; + text-align: center; + vertical-align: middle; + cursor: pointer; + border: 1px solid transparent; + color: white; + background-color: #5cb85c; + border-color: #4cae4c; + padding: 10px 16px; + font-size: 18px; + line-height: 1.33; + border-radius: 6px; +} + +.col { + float: left; + width: 33.33%; + position: relative; + padding-left: 15px; + padding-right: 15px; + box-sizing: border-box; + + .thumbnail { + height: 200px; + border: 1px solid lightgrey; + border-radius: 4px; + margin-bottom: 20px; + + .caption { + padding: 9px; + } + + img.pull-right { + width: 50px; + } + } +} + +.pull-right { + float: right; +} + +hr { + clear: both; +} diff --git a/app/styles/vendor.less b/app/styles/vendor.less new file mode 100644 index 0000000..0593697 --- /dev/null +++ b/app/styles/vendor.less @@ -0,0 +1 @@ +// Nothing yet diff --git a/bower.json b/bower.json new file mode 100644 index 0000000..a84236e --- /dev/null +++ b/bower.json @@ -0,0 +1,22 @@ +{ + "name": "chatblendUi", + "version": "0.0.0", + "dependencies": { + "modernizr": "2.8.x", + "angular": "1.3.x", + "modernizr" : "2.8.x", + "angular-animate" : "1.3.x", + "angular-cookies" : "1.3.x", + "angular-touch" : "1.3.x", + "angular-sanitize" : "1.3.x", + "angular-resource" : "1.3.x", + "angular-route" : "1.3.x" + }, + "devDependencies": { + "angular-mocks": "1.3.x" + }, + "resolutions": { + "angular": "1.3.x", + "modernizr" : "2.8.x" + } +} diff --git a/gulp/build.js b/gulp/build.js new file mode 100644 index 0000000..2e6a015 --- /dev/null +++ b/gulp/build.js @@ -0,0 +1,96 @@ +'use strict'; + +var gulp = require('gulp'); + +var $ = require('gulp-load-plugins')({ + pattern: ['gulp-*', 'main-bower-files', 'uglify-save-license'] +}); + +function handleError(err) { + console.error(err.toString()); + this.emit('end'); +} + +gulp.task('styles', function () { + return gulp.src('app/styles/*.less') + .pipe($.less()) + .on('error', handleError) + .pipe($.autoprefixer('last 1 version')) + .pipe(gulp.dest('.tmp/styles')) + .pipe($.size()); +}); + +gulp.task('scripts', function () { + return gulp.src('app/scripts/**/*.js') + .pipe($.jshint()) + .pipe($.jshint.reporter('jshint-stylish')) + .pipe($.size()); +}); + +gulp.task('partials', function () { + return gulp.src('app/partials/**/*.html') + .pipe($.minifyHtml({ + empty: true, + spare: true, + quotes: true + })) + .pipe($.ngHtml2js({ + moduleName: 'chatblendUi', + prefix: 'partials/' + })) + .pipe(gulp.dest('.tmp/partials')) + .pipe($.size()); +}); + +gulp.task('html', ['styles', 'scripts', 'partials'], function () { + var jsFilter = $.filter('**/*.js'); + var cssFilter = $.filter('**/*.css'); + var assets; + + return gulp.src('app/*.html') + .pipe($.inject(gulp.src('.tmp/partials/**/*.js'), { + read: false, + starttag: '', + addRootSlash: false, + addPrefix: '../' + })) + .pipe(assets = $.useref.assets()) + .pipe($.rev()) + .pipe(jsFilter) + .pipe($.ngAnnotate()) + .pipe($.uglify({preserveComments: $.uglifySaveLicense})) + .pipe(jsFilter.restore()) + .pipe(cssFilter) + .pipe($.csso()) + .pipe(cssFilter.restore()) + .pipe(assets.restore()) + .pipe($.useref()) + .pipe($.revReplace()) + .pipe(gulp.dest('dist')) + .pipe($.size()); +}); + +gulp.task('images', function () { + return gulp.src('app/images/**/*') + .pipe($.cache($.imagemin({ + optimizationLevel: 3, + progressive: true, + interlaced: true + }))) + .pipe(gulp.dest('dist/images')) + .pipe($.size()); +}); + +gulp.task('fonts', function () { + return gulp.src($.mainBowerFiles()) + .pipe($.filter('**/*.{eot,svg,ttf,woff}')) + .pipe($.flatten()) + .pipe(gulp.dest('dist/fonts')) + .pipe($.size()); +}); + +gulp.task('clean', function () { + return gulp.src(['.tmp', 'dist'], { read: false }).pipe($.rimraf()); +}); + +gulp.task('build', ['html', 'partials', 'images', 'fonts']); diff --git a/gulp/e2e-tests.js b/gulp/e2e-tests.js new file mode 100644 index 0000000..b5bb951 --- /dev/null +++ b/gulp/e2e-tests.js @@ -0,0 +1,36 @@ +'use strict'; + +var gulp = require('gulp'); + +var $ = require('gulp-load-plugins')(); + +var browserSync = require('browser-sync'); + +// Downloads the selenium webdriver +gulp.task('webdriver-update', $.protractor.webdriver_update); + +gulp.task('webdriver-standalone', $.protractor.webdriver_standalone); + +gulp.task('protractor-only', ['webdriver-update', 'wiredep'], function (done) { + var testFiles = [ + 'test/e2e/**/*.js' + ]; + + gulp.src(testFiles) + .pipe($.protractor.protractor({ + configFile: 'test/protractor.conf.js', + })) + .on('error', function (err) { + // Make sure failed tests cause gulp to exit non-zero + throw err; + }) + .on('end', function () { + // Close browser sync server + browserSync.exit(); + done(); + }); +}); + +gulp.task('protractor', ['serve:e2e', 'protractor-only']); +gulp.task('protractor:src', ['serve:e2e', 'protractor-only']); +gulp.task('protractor:dist', ['serve:e2e-dist', 'protractor-only']); diff --git a/gulp/server.js b/gulp/server.js new file mode 100644 index 0000000..81d72d6 --- /dev/null +++ b/gulp/server.js @@ -0,0 +1,63 @@ +'use strict'; + +var gulp = require('gulp'); + +var browserSync = require('browser-sync'); +var httpProxy = require('http-proxy'); + +/* This configuration allow you to configure browser sync to proxy your backend */ +var proxyTarget = 'http://server/context/'; // The location of your backend + +var proxy = httpProxy.createProxyServer({ + target: proxyTarget +}); + +/* proxyMiddleware forwards static file requests to BrowserSync server + and forwards dynamic requests to your real backend */ +function proxyMiddleware(req, res, next) { + if (/\.(html|css|js|png|jpg|jpeg|gif|ico|xml|rss|txt|eot|svg|ttf|woff)(\?((r|v|rel|rev)=[\-\.\w]*)?)?$/.test(req.url)) { + next(); + } else { + proxy.web(req, res); + } +} + +function browserSyncInit(baseDir, files, browser) { + browser = browser === undefined ? 'default' : browser; + + browserSync.instance = browserSync.init(files, { + startPath: '/index.html', + server: { + baseDir: baseDir, + middleware: proxyMiddleware + }, + browser: browser + }); + +} + +gulp.task('serve', ['watch'], function () { + browserSyncInit([ + 'app', + '.tmp' + ], [ + 'app/*.html', + 'app/styles/**/*.css', + '.tmp/styles/**/*.css', + 'app/scripts/**/*.js', + 'app/partials/**/*.html', + 'app/images/**/*' + ]); +}); + +gulp.task('serve:dist', ['build'], function () { + browserSyncInit('dist'); +}); + +gulp.task('serve:e2e', function () { + browserSyncInit(['app', '.tmp'], null, []); +}); + +gulp.task('serve:e2e-dist', ['watch'], function () { + browserSyncInit('dist', null, []); +}); diff --git a/gulp/unit-tests.js b/gulp/unit-tests.js new file mode 100644 index 0000000..8928ec2 --- /dev/null +++ b/gulp/unit-tests.js @@ -0,0 +1,31 @@ +'use strict'; + +var gulp = require('gulp'); + +var $ = require('gulp-load-plugins')(); + +var wiredep = require('wiredep'); + +gulp.task('test', function() { + var bowerDeps = wiredep({ + directory: 'app/bower_components', + exclude: ['bootstrap-sass-official'], + dependencies: true, + devDependencies: true + }); + + var testFiles = bowerDeps.js.concat([ + 'app/scripts/**/*.js', + 'test/unit/**/*.js' + ]); + + return gulp.src(testFiles) + .pipe($.karma({ + configFile: 'test/karma.conf.js', + action: 'run' + })) + .on('error', function(err) { + // Make sure failed tests cause gulp to exit non-zero + throw err; + }); +}); diff --git a/gulp/watch.js b/gulp/watch.js new file mode 100644 index 0000000..1335927 --- /dev/null +++ b/gulp/watch.js @@ -0,0 +1,10 @@ +'use strict'; + +var gulp = require('gulp'); + +gulp.task('watch', ['wiredep', 'styles'] ,function () { + gulp.watch('app/styles/**/*.less', ['styles']); + gulp.watch('app/scripts/**/*.js', ['scripts']); + gulp.watch('app/images/**/*', ['images']); + gulp.watch('bower.json', ['wiredep']); +}); diff --git a/gulp/wiredep.js b/gulp/wiredep.js new file mode 100644 index 0000000..9821220 --- /dev/null +++ b/gulp/wiredep.js @@ -0,0 +1,21 @@ +'use strict'; + +var gulp = require('gulp'); + +// inject bower components +gulp.task('wiredep', function () { + var wiredep = require('wiredep').stream; + + gulp.src('app/styles/*.scss') + .pipe(wiredep({ + directory: 'app/bower_components' + })) + .pipe(gulp.dest('app/styles')); + + gulp.src('app/*.html') + .pipe(wiredep({ + directory: 'app/bower_components', + exclude: [] + })) + .pipe(gulp.dest('app')); +}); diff --git a/gulpfile.js b/gulpfile.js new file mode 100644 index 0000000..9670cf3 --- /dev/null +++ b/gulpfile.js @@ -0,0 +1,9 @@ +'use strict'; + +var gulp = require('gulp'); + +require('require-dir')('./gulp'); + +gulp.task('default', ['clean'], function () { + gulp.start('build'); +}); diff --git a/package.json b/package.json new file mode 100644 index 0000000..c5486d8 --- /dev/null +++ b/package.json @@ -0,0 +1,43 @@ +{ + "name": "chatblendUi", + "version": "0.0.0", + "dependencies": {}, + "devDependencies": { + "gulp": "^3.8.0", + "gulp-autoprefixer": "^0.0.6", + "gulp-cache": "^0.2.0", + "gulp-rimraf": "^0.1.0", + "gulp-csso": "^0.2.6", + "gulp-filter": "^1.0.0", + "gulp-flatten": "^0.0.2", + "gulp-imagemin": "^1.0.0", + "gulp-jshint": "^1.8.0", + "gulp-load-plugins": "^0.6.0", + "gulp-size": "^1.1.0", + "gulp-uglify": "^1.0.0", + "gulp-useref": "^1.0.0", + "gulp-ng-annotate": "^0.3.0", + "gulp-replace": "^0.4.0", + "gulp-rev": "^1.1.0", + "gulp-rev-replace": "^0.3.0", + "gulp-ng-html2js": "^0.1.6", + "gulp-minify-html": "^0.1.3", + "gulp-inject": "^1.0.0", + "gulp-protractor": "^0.0.11", + "gulp-karma": "^0.0.4", + "main-bower-files": "^2.0.0", + "jshint-stylish": "^0.4.0", + "wiredep": "^1.8.5", + "karma-jasmine": "^0.1.5", + "karma-phantomjs-launcher": "^0.1.4", + "require-dir": "^0.1.0", + "browser-sync": "^1.3.6", + "http-proxy": "^1.3.0", + "protractor": "^1.1.1", + "uglify-save-license": "^0.4.1", + "gulp-less": "^1.3.3" + }, + "engines": { + "node": ">=0.10.0" + } +} diff --git a/test/e2e/main.js b/test/e2e/main.js new file mode 100644 index 0000000..eb281cf --- /dev/null +++ b/test/e2e/main.js @@ -0,0 +1,15 @@ +'use strict'; + +describe('The main view', function () { + + beforeEach(function () { + browser.get('http://localhost:3000'); + }); + + it('list more than 5 awesome things', function () { + element.all(by.repeater('awesomeThing in awesomeThings')).count().then(function(count) { + expect(count > 5).toBeTruthy(); + }); + }); + +}); diff --git a/test/karma.conf.js b/test/karma.conf.js new file mode 100644 index 0000000..e2159e3 --- /dev/null +++ b/test/karma.conf.js @@ -0,0 +1,28 @@ +'use strict'; + +module.exports = function(config) { + + config.set({ + basePath : '..', //!\\ Ignored through gulp-karma //!\\ + + files : [ //!\\ Ignored through gulp-karma //!\\ + 'app/bower_components/angular/angular.js', + 'app/bower_components/angular/angular-route.js', + 'app/bower_components/angular-mocks/angular-mocks.js', + 'app/scripts/** /*.js', + 'test/unit/** /*.js' + ], + + autoWatch : false, + + frameworks: ['jasmine'], + + browsers : ['PhantomJS'], + + plugins : [ + 'karma-phantomjs-launcher', + 'karma-jasmine' + ] + }); + +}; diff --git a/test/protractor.conf.js b/test/protractor.conf.js new file mode 100644 index 0000000..5285b48 --- /dev/null +++ b/test/protractor.conf.js @@ -0,0 +1,21 @@ +// An example configuration file. +exports.config = { + // The address of a running selenium server. + //seleniumAddress: 'http://localhost:4444/wd/hub', + seleniumServerJar: '../node_modules/protractor/selenium/selenium-server-standalone-2.42.2.jar', // Make use you check the version in the folder + + // Capabilities to be passed to the webdriver instance. + capabilities: { + 'browserName': 'chrome' + }, + + // Spec patterns are relative to the current working directly when + // protractor is called. + specs: ['test/e2e/**/*.js'], + + // Options to be passed to Jasmine-node. + jasmineNodeOpts: { + showColors: true, + defaultTimeoutInterval: 30000 + } +}; diff --git a/test/unit/main.js b/test/unit/main.js new file mode 100644 index 0000000..a8e42ba --- /dev/null +++ b/test/unit/main.js @@ -0,0 +1,22 @@ +'use strict'; + +describe('controllers', function(){ + var scope; + + beforeEach(module('chatblendUi')); + + beforeEach(inject(function($rootScope) { + scope = $rootScope.$new(); + })); + + it('should define more than 5 awesome things', inject(function($controller) { + expect(scope.awesomeThings).toBeUndefined(); + + $controller('MainCtrl', { + $scope: scope + }); + + expect(angular.isArray(scope.awesomeThings)).toBeTruthy(); + expect(scope.awesomeThings.length > 5).toBeTruthy(); + })); +});