From effedfbf46fc2ddb27fe90e527a8595f58c7f184 Mon Sep 17 00:00:00 2001 From: Nicolae Claudius Date: Wed, 21 Sep 2011 06:48:26 -0700 Subject: [PATCH] marketing, etc --- app/assets/images/rails.png | Bin 6646 -> 0 bytes app/assets/images/slides/background.jpg | Bin 0 -> 34199 bytes app/assets/images/slides/loading.gif | Bin 0 -> 4178 bytes app/assets/images/slides/navigation-next.png | Bin 0 -> 2191 bytes .../images/slides/navigation-previous.png | Bin 0 -> 1978 bytes app/assets/images/slides/pagination.png | Bin 0 -> 1702 bytes app/assets/javascripts/application.js | 2 + app/assets/javascripts/slides.js | 1055 +++++++++++++++++ app/assets/stylesheets/application.css | 2 + app/assets/stylesheets/marketing.css.scss | 85 ++ app/assets/stylesheets/overrides.css.erb | 4 + app/assets/stylesheets/slides.css.erb | 85 ++ app/assets/stylesheets/theme/base.css | 10 +- app/controllers/domains_controller.rb | 6 + app/views/fragments/_top.html.erb | 54 +- app/views/home/_headlines.html.erb | 33 + app/views/home/_slides.html.erb | 21 + app/views/home/index.html.erb | 32 +- app/views/layouts/application.html.erb | 5 - app/views/layouts/marketing.html.erb | 4 +- 20 files changed, 1347 insertions(+), 51 deletions(-) delete mode 100644 app/assets/images/rails.png create mode 100644 app/assets/images/slides/background.jpg create mode 100644 app/assets/images/slides/loading.gif create mode 100644 app/assets/images/slides/navigation-next.png create mode 100644 app/assets/images/slides/navigation-previous.png create mode 100644 app/assets/images/slides/pagination.png create mode 100644 app/assets/javascripts/slides.js create mode 100644 app/assets/stylesheets/marketing.css.scss create mode 100644 app/assets/stylesheets/slides.css.erb create mode 100644 app/views/home/_headlines.html.erb create mode 100644 app/views/home/_slides.html.erb diff --git a/app/assets/images/rails.png b/app/assets/images/rails.png deleted file mode 100644 index d5edc04e65f555e3ba4dcdaad39dc352e75b575e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6646 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 AQ~&?~ diff --git a/app/assets/images/slides/background.jpg b/app/assets/images/slides/background.jpg new file mode 100644 index 0000000000000000000000000000000000000000..d3c9f2837d627d806c82fe9011cb931c5b7aa776 GIT binary patch literal 34199 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
|!9+u4_=)zd@_U3H*Vi9<_1C8qndAh(JEsr z*thn&=6@3hqgN&;4a;q@Fey~CRP&_a&~TxQwt{}^+!rFfT&`e=Rx6_$MvdpqjXEFC zh{3ZDQ-*hKmB=awCUPIIT*R6q+IAZ40-lnkFmwSTY!KeXxSUZnzKCajo%pB8bR4MS zWltPGJx-+t6t*SSX7vr;!89EBm#%u2HNgXW09B&mq8*_x9477;wsym`xA>3P7vPN60u9sqN zw5Qs+w&{$H_C&T`%&veq4*{@H+1RP z)W30Yv9&i*R?@!IMals5f0-ki3LlX9v3k2g?|(YSNp{u$T7@O7C>~w$g=}XxC4J$U z;`S1@_aGtmiNPy(mp@w?ZxpCtmlisGHtq829hF%dRhky7t{UUE%rjc9j!CN`HPOfK*SN-$ zw;rK=Vb=zf1Xj|2*0o|g6>gv%-75q&a$L!<_DZ`)ai0iud421h2|XJrG2SCL^yHBA zK~5iu@1I4B_qj5%yd6D!!EE&^z8BR@HY^#F3HNDNNhA6>*vD-!1&B@70Vo6qB=!@J z-DH<5qXscjP?J}f?4!o9KbJzQhRzSK#>io)O!8_I^gR_v^?Sb~*h< z6R+>LHV~wl7!oRc6O`)9_D+a(dBzq|olX&jVApS5mg`dJEm=n+E_~z;lT@~t6`SYq zvNZP!-p4!!;aO-!p}h5)08})T3ELo&^Ag_cT9pl6;Fm;@J;3v}@^18@xI{LIn!Y^>gSx_DNS-Z$Hbi z9`AL^FDUEH>bDVS3Bjd{T6Nh6IhBI-M7swq^=H0^gez;6j) za{gd{zAX@~RjiGz#}+1K>%`A#?C3m`KZ?_U30JU z;X7FA^2Z4VrysI%PZ3%v^^To9M5$TgBCIh$I(3hBy#k^A!9$3^{=^sP!>uuyskP`I zj$zrDU1r!)kx1~;{y6#4G1c~EI&5QwDrQ&E;%fUXH0K>yx|#?r&C2s2`Bf(K94khI zJc;Rsw}=J)!9?Qq|FUKk?cKnrM!~^hM~UN`35Z}5TIPD}j1v#km@N!RXgW*bUt4I3 zdZZm5Ee3H(HimKp-}jJG6b}#C7p3Z2*0v4K)2Pr2(gqoQx2nAb0;6C@c_@a_#~-|hlXHb9s z#-;F0-Si*T#?aL)Mz#96It|I-P!M8zQO-ZA!wnb@3Bw-G$1D3pU#`MFXh$@R=+?Ij z4}O?}z1T6^UZ0a&CBg1=1}K<6*E{WnGTE&}s7Tn(+wNsi1=x}8RFg*AcGb>-_<6bI zj(PGHl-BvH(RtsBd#w=cs^50INCKCqZl871cHag4FFVfzhitM@9VV@Dj!f zBF(p*Z>G}qt~ZfUOzL$-W!_@#By5y7N34h$O@Qp|5d)mMC2E*M1lF-XuXsIO=oTc& zy@P2*%qj6JE*JPVPr?-JsqtQ!Vf#l26^|b~@rT=l!9{~rLoMgGpEFD(_BLWd1)F|1 zbKOauXV0{HzIT2`XFv4Z4Kek5|EM^$hun@?cyi`b=ZeAY6@TH+Q+u{_fzL#tNuk5y zT5_61zNQs*J-(ekLqH2N6!?*Q(fJQ$cvRMq5C1v-Y>=RA0Hadd>LQ%vaSH{aDw%=Y2Z;mRj zBB{w1GrTF)qY5X!u*T68``hyUg1aD3dM#OF{P`_jh2J2XoW63n(KIz-7G9DTDjFcu z?d(3ju?s;Xv`S90Y+GNK4642k*~B7J;-xJr=-2{Gf*4R56?PsMuyADWOSIpfWD``(yfJ8{L+dHb{nPu<CozT={(Tk_c|a%)R}$pLv%mc_zsDLci3 zC~I~ac_kP+()7yR#eJg0Nz9K)e$7@E_b6uUs@Q#_Pb-0$;%;T^p6`R4`7pDJzX%BB zPb-eBL557EzTSlSos`XT3C3Fn#-XC3`5JgTrcs6@ffhR*jp*#vrchyOc90O!h$0xQ zV?TMf!V~WGncMuqDmt^*h>)}&K83O;^*Ah54}I_Io;BpJH9=RcQiFVrxo>L0R!?qwe3~{MEph zbSkNVAVLz-8|TE{cX8r=*j@n$7cVm_?bBCX>TT^!xaw<nc=UqW$P`E{%X?OJ83n z>UG67@Y4oGvljT%H@@>yod_Ab!<5&e7_74P-_~ky+XnX1Z%J#$MeN`T!M6w z<10w?{-Y}2w$CB?+be(DDINJjWI4OK9e0x6Nh;+;BSd@W`w#?(vf_gYIoN;qvAV9+ zjP_6v8b_+AagW)GVS=V$M1n}f_NWd60IIPJuy`xjHIVeI=b0Y+DB8pr-dA%r2`<`H@?zn=>8x)yJ-HeA)bo*qIxD{PPRBlkfKry5We4x#=1d$hur)n&H zMgCHg$_E(-v1*)(^Ti&Ho$dvZ`$TIM!;Z3|qn7@h)FkhAF7z8JsxTiletg_p3!T>A zKGJL0-dkTB&hcz&!Sl zcDUn`?qNDN_JjR{W8?_1x z7;)BGX2Wf+Ve?j_o{xJSa-f_VI7yL8oGwdpdsBuHays;lY369808##M#!+ziNyfxY z10+Mcv-yyZtYs7qp?tNm61XX7W3yjU0d|7w7H257tkt_6W2z8eo8V=-0@K+m?Uo386!oaED4oU(?q{?X;TRq_k~zJ zIBeoe-Dn$%Ay)4-UWju4QQd9yB`8Jv{K`o6Qo>v07!ogf*?zImQ?&8$6J!kx*{U0SX3-szzh5O<^TwcoTcI{IhV`ASzTOvj10K#AURIj>o!DRM`Vyh3u;p|ldsjzPg6Nep{s|^i z@pmvWGVvo$Mb5`)VzAe5igP&RDW z@A55-=zL9!d?63hDtJIN?|3E`kcVD{_aGSgeAThK0lu``Ti9F_3tg5Ko;BaLT#sd1 zV^8E4LdWS#gpWt|*1dQu#>?k7>x!do#=c|iI&L`FxQ?uY5#fz4zOv!*4x2lbsIs=; zdX4r`<~IIChXpD$ijg7%^t9wVWX5?`FR7O+gJGv7dh`|KgAF= z(wlfDKc|p($&@b5E9yTuZ2q%SZr6X?I!{4uHTrvGw3oks%|Mi1vg>?~{1VQ_Q3@i& zVDyGs#RS)@|7Q!!SP;<8cRI?51a;Y)H?0pExuzQx;*UQPZ!$y&~QyDqvsl* z^rl=bl7Y@e>1Tzl&WV~Zi(>zL?HKIix9vV20VT>)VE`~Q&3EwUn#=>X!-=JVZwhu& zkzG$I+};-LNsY$zM+iA^3mM$6wD<5L8tDILr=oQjuo`h1%Hc1koZONmDhbL1T}P!t zsg#&nkkxhC?oeb#c!{E)#^41aFALy#3G>~RM`KvJp$qLHsy_jQ{=4te6x)luuJr``FRxS^jrY?un84uhjY@J%yHR$ zXqfX-yU|Yu&^v%eJ%~JbLs)%0O9BX{t3|A?#W_t!z_L>K%jq$@N7hRyOD8#aKe8w0 z%Dph?M1pQl#<0Et#J6_H@crspD;a;;$fgNp%HOT1&b*&04c_AK8#NOrZ+s?F=Lnm5 zOlE4We^>`-8A2xyhiY5F@Bb^W&9p4DDm&wG#~hEHGCG>M&;d60V(D60-pG8p=Rw{3d@`Ydw|y12s7r(#Ub6bX}~Z1B7D z?Gkq9VBD(v1PZhC_~vv%oxQ#CrZ9z(Om{vBFV*aNu#RDDsbhL#!E2y&T5VW1V1GMZ zJ!f;)(49^)n88#(Zw*`67|HKImhu&cz{n^6s0y}=HGVi@)o(0uJDAzJDzXR~R1d1zG<(56hW>@6S$Y7+Q zHyf_zGZAJjH*daLwHV8Q9I!Qtnemteys^uFFFMWAyA-zmi6VURW@(!{ju8Cd+x4SxQG%M$RyPeNwPid+W|Nh?lR#OEY80l#@_8tr4z= zB*FUvvB0={Ax6@2I($5QZ=Ax&&6Hx-E@i-IxZLPxu~H=PFz)aylxM*2CYCnUab5sq zn7VV(roy)cvq`%|yMgO%Z%2d!^8`+SXyA{J5-|W zPafZvg*N|1Xn$QSl9M)pb0qTfDe(JwglOMscBQ|!6v)MAwF!QB^s1fAS4~99A#2zG za`tBr(rgc)MFiPS5M-i-Cp(Xsf|oDYr2#F8!snb>Dd#ltkzkEdE2nQ*!8`7&Y!jKU zB1fnB{gzQ)n*}gs(}d6W85Tn97H)a>iM$!5WDEDPLwlb>GB=pkg8PF`y*tS zR!X@%sxNS!Q>h_ZqUgCAx?C_#jpZ3IU0g}m&@Fm9O0Y58Cq~spr`ww^i@RMYi>1<8M;66vs~pd4S{LR9MH2mrYa8}f$^++ zGr#mm!X%QqJ&>n=QV=sAO-inoxHR()0plC!WH!5!qbW(jVT1NZldIQ9WCSEXL4&;Uz~lXK*)cqq^2ZGbx*U*fDIqFW2PZK zU4NcSVYFQ?2&D-Z`Pxf8W~FPDAFw4|9QG;OLD_CiU!e%7?RC~swDO=zAD+V6VsR_O zq+e&`57A~V!%(C%jbonqNVr&GEHBvE`hFD1qoVw;K;)zi(xRZWaaZAGDsoT4fV=Ba zjyNAF?iakvmA3BY;Pua_?-(jimZz?N|D^AS@^RRlB5PE)NKd0capM_sZ_{>us)r)Q ze3S1>ZpEu1Fbo-s)7s&aTgT8vEM{S^I?sd^#6(ffCALlI!WT42hE7lLTBG^3xVI;} zG(tms<8-By=0qrIxeTMaE>-22xMRjv%hzx2n(fC$l$5!@R=OtG9j)*$wE`P!>Kby(I zUy5$?(oPSre~^RDgB)L2JbS}_;f3yQ5%bvXnb7lp;;dtmS_&M)xc1zR>957ld`$O` z$fMmEYC7h4?%hF>BQb=d?uIh{GH%wrf(SNNB_nBL8oy{}WACkJF)RggJ{Gy@qD2&p z5o*44(whB}qmW+yx=?pIqp~u{6^*`oFEFR1vo`^S!vft#Dx`PPNhcK10{PGQwx?-Z zS#%xMmldu{Qs{QGcKIqb@}=FWiemsaJULO@`XV~!6)<&DrI&WK&WJy>V(1g>5oxe9 z(n!()&@a^-p1QuH@QK9feoiic+h7JY9X3GUmIl&g#bDIQ?UT;gI-@2s!xWq_eosF+ z?wIMO!^UH(WYOAL!{Ik6%Q=Grs-SqFRlT@B5kS4Mm9@+JH)MJHU`_v+&BCUgPxtUU zA$kI(o6pNS688MX!-Y`cVND#;ab0f;%4FZSQ%pS-`3^h8)mYBfthQ!H5@Nq2vhy(I zg$dJI$?g`m!wBaU6D2FB@E0L%tIF-E-LQ;NW6n*j3i%Hv%5M(94K1esoeln(ia#JS zTbuJY^8^7rlPVvx-8d&0sld1fKqY_H+1?z)e<^k;^|h#(Q8voQ-3;cTpt=L%y8}W9~B~dsvzdCb%Ko3sHE%g znhr(#3lDKi+S_#p%<+1d6a~|76j{$x-E7oq^{Zk2wfTqmpfSXwG2&^8S~|-^!@*w0c}x4D?1} zE}G{@T2ZUBuxl#~VngTLjoR@A5h(393JLGVTP(6HgwX+}&1E}+k@sbAl zzs*Evk?(4f@&!w}FU?5>#Ai{T>v)m%$l2sHBvp;hLdBEwT#xX9eiTDc-nY}&T|69T z^X#MDo{iPqQhKe}W*++$mkccd!1vHrH*2%>{sNF$+K*6lO}tOXf#+bp#dhhEfQ#}s z5-gSYBBK|api6fO0`)wh##@`e!EEw_b5MXl*AR}}7t63CKe9w+?-`W`Wp=oB_{t%A zs2NXTa`aUG3qwmqJ_g45bZkK z`Cj`yF%-_*+$K_WhK%Jcr+2uFQ$&J1_v(hrNKKlHFrKOR_|v()zdp26uv@>b%lH?@ z260cp8VZ-{x~(2%{f5%=<<~A>%aMN&1n8i-z5Y4q?yKN6#^6+B(^aRE>~kM(sNmI6 z$wA8Bfl+D zaa!|@2cQZGODOQKIcB{(A_}3zrEx4`;`}e28xDK)l$c# zscc)u17uw4WA8^eOlj%jJy$y1vj)-yY5iY%YV2gM?Q)w(@RgD^Y>S4{t(i7B^4p{< zwOl2ql*aY+W58@36ElpwSXvR-Bn4w~Bo7NNb4WEMnR1v7gt*+(dqp`f=zy0JFw6R* zw<|bA+HmyJ+Bk*7xLF9K!7KIMVGv0yMc0q4k%sdGWcVf&CS=9=%FO^Wd3}%Q-1&Za zjsJLc8Nqfz-8jYnVeQj!qQ669hVYVMnn4!BWZKQ^B!;BVD}@L3KCxeERu1lD+6VKD zA}dev)Gc3g3#g27zb-eSCZ@Yq6kOY$2=w>e%T6flIPB&WbQ&IvUxXds?qA}}po^_J>tQWGm_^u09xpAVq3)VuXMuT-=NufpyPeoiSG zA&!)iniA&dJgK~udGUf<*cY$ev^AdFmMj7&mYP%hK%{-kCJzKqUR9|F1hhKR^VXQ5 zY?fB8HDT)?)kKTtOu{-Gj-wFL{K(w3NF5{^p*^?kP^UgjYMwH@GU|;)?w4rf#4_6X z^Hqka?oI$YhtX)VQ%Arcq$`#_X;?CM9Eo-(y5r}k_VZt#Uo>oRH=2ADA9&q*s)9l7 zeBLX2)sX(#l{IWixKmqBd5`JSzZ9BnzluzTzc4oO=E_7db%`W?}vX^&*_W%DK~ zJ>fw@>|!EMG1VWVZ3NI;*vDQi?hPxC}+Gy@vHVzVS7v z?wdY$x(cJJM2`azY!EGZn~3{fqzIyI{X^)Hv6kcJB23JU-srLNM4a|71Ydgrr^viV z7)6`N#Wt%r5SAWZ`4_?MQ_EeT`b{68xGORZ>&20ULrn{>@hr7zQ4z}}itHZwV} z2jON&ddppY&CZlLKORZ1H6N7Z{*S8o@;xg?ZQ(+zhMOlPX;I@*CJ6~0XVnUrsh2P5 zjBhu{V28y1kYEVgm4S>l#`am!S{T>BErk`Ahh1(jX@INPt8Q%jbEL@!;mUb-^%Vv} z!N&181uAo`O9_Sb6t}4f73lD8*~!{$r3I@}S`7+zZ0lz?yY9%y!B+cLE=I>DF7tP} z_)>%Uv1N+HTtP9C76`DPly!$wJ?O%K*VBAuxX@umvH$`EzS*;GKM8dF5?FNOtX($D z$JlIR{Q(=~Im!NR5OgQjW$f3Hc4krogA&rQpk;7U3~6#iT47_m4k?;B7jLfjevJlI zTS6Uowy_dwwX%%kPF@{cUoF2Tyz&F^s$4HEF&eFMq3|^`Xp0Od3`W}o&eMDrv&UOI zl)TIS4MeH7ACRnfVtQ))0~SWP?{dB!B4ia+c*asdN^%*$Ge6d@uy{yxT9`~5;$_w$ z8-V>J1w*P&O>w53p)4Qn(ipxsaTrtuLG-WAwi9N-qR~FL43Q&g4US^gU!%6Lh-nD7 zQezK9)Uum+6=0(MK99*xkhgzPAm9hIUFuK~wYP@l+Flu0fFAs#(o+-F7V-8A?&T3= z-h^^Qr=$o_Hq(ZXc>c)erb;*7la@RRm*Pji3;2+0h#@a3vJJ!44l z#yv|K|DFzZ4D{d1cc{C|+z*BW#5Q{ow+ZHlcY~pfS=+;@&F0F@Rt&8x$%>WQyH$Hc zgfM-NuWxl$6_VO&T2^J?Y|@p{q_iVPJm@R*N^e4EJAKw4$0OwN7FK@dB)k0eKdQi{ zB;0hS#*MwjyWvE*kG#FW(^tl#$JwF$DNp3!Ac`Z4a?G@%(}*&O%ER)v*)qWg#P?uM+t6zI+}?>=l8^OAC5N71fJ*zn|5_bjYzUVlwcIz*Bi zyVQpeIn0wbeQu3<#$_mGf>3O-{)m9GaOJq>dP;pShNY+5o{vP^tQ`=86&yzAyc36k zjb7~D`)GsQCF9@~{zUy~%6T&W_V)ag^?w)P5%cVf)>gA=3-S;Ha{v+ERE=G@Ht9Iz zO5f7UJK}j>I0vxXr*Sx8xKr zeAj0n;&GC~Z@n%e&GY)&lMmk$Z)3{iiXWaQCRpDM5A8}nSs&Jg7~==VVj}v*f57?u_}c3PyqONvL*VbI03!aSq#r_ z$j(%LWuC+Vn`KOLm4cwaPGv!F;-3y*xyJXaq7$hJ@4G$lm>TW>dxl)g$lM<#j;#~z zpYGt;U>^zHBqUy-;o3JDw4@-Evj)Xp_Wtew6X)I<@1mj4^wXq^d?c>b_(Uk@wJZ< zw--X%XB+@o-v@V1t0xMhCZOc3`%F3u#i1|65zb6M&&*VDf)`+EOS0;AAHst^Kx8hh ztJ#|X(v^f(^?ZSfp(d0@WA=5fKw*?S(38vx9T9IZkTQ_)tvjf_OKaA@6&Q6p{&^q*g2}+ z;~;4T2(UehyxDXvl6k6m3g+){9{rg?^PPb!4emEwH@7@AocoY+$w#X~b9G3!I^ryp zA)&DZ#*nSj6SFIzP&V^I>{WYDYQn}Vk@7vF>&v__oalC^^)Xvx{>*r}=@A8S zal(JCXo~AW2sZ7b$4=8!FJ!YfDL6Ia`H_-Vzsy8rsDE z*E78vU2D^nkdNhQQtC~7UPP78g@%9H!X^aMFbbQmO?CC61oNCGc|jBvN#8DPbXX{` zs4`8|hq?WyUU!j%d|4C9o8>I0=CmzSnl}_;=qMuPERs>WCTc)3^mje-$lBr7)(Hg@ zMVY3ZetxUs=>UJ+UL&Y$7L;BuBcp2vY5Dne|QjqZX9_Hgc3P)cW17_(Xr{zLv2um0k`%_uK4)H3RF5uWl z1uKzh4d*fbp##wTG;IXC{2HmiDIrEWtFHcw_|v#3W+TrSx=O?BQz!!proPl8+Q1f` zA1bos-906(q8d)L{qC=OrMj{fNWMxmyjhbx?n-@TfPNj;h;$G$xW)Jkpd>B!%WJ4t1M{^Bp`*$n7SetMFrj&N=H(9O)Vtxahmr7XM zxLFLO6hjlRC{cuGRZTrT4Hcf49`jUM)@j|aMoDm3j?TqC+aroye{*yrg8Ut%a%O&y zWlrWQ_u<`((-be=(Nl zeouc7A*>pVI~cVku_)GPb`f-@qxz-0~S_;{Zy;J zWJ>q8uni9I(3H+2v`!y81Iu(I4FlIi_%49F-YTHw9ytZ?Ky8NcgT_~{Abqhkt+xJm zFNjbxx`=+It1e10(mX7`vV|>l`0u@+uRxmbC5 z&gc24O>9;WzoX}rte#f|lxceBkNHniBaN*R;{7hNv{HKI<4soJ+Y_oN8+-UD5H5Sn zv6wNvC=N`tdB%+05+ z1eAEKI>LP)k|lQ*E$+pm#vl+ zk|DjEQ)m4tMiV>F4R%P2hV&`fB@f#>2NT+=_S)_4XR~L0U!OG`eALEzyD0>n2X+~G zRS8FWI)uB2Y+*$jbhTbtf8HV;63rFSpYcV%^!`7C`s$k+F8>N44C^!^Ry!_g{iLvG zM*0>uoWg4f6bjVPK@iV1qj~?e6;BAC}nTQs%N}AF!rU30h?}IvUg-$j6<6vi5xO5O4$$(`n+9GR$W#=jfhN_ z_@3f9lXSbh*?2Ea0jJNr!r;QK((qu=W^=`O^?l8D0lOTr19wYP--(7yk!B73R0xi( z`+Ey&Tyfv#9Y_F$`^@k2&_xl(uK=W6;MyjWxV*84p?{vhOm0OtRDHn4dR=3h9g`Gh zJEo|YCU;>T@21^J_Jxh^X-Dj|WNa2xR{;MmPcT)|X0ZN0Doex#-DfpQ59vhHtmv(; z4NsEvL}D~TMVZ&!lwQjkxE*ucZW1v=+E%`9dq50Pu%GTL+^D~eUJcMW>lI?@5SqdN zyxt}FFu)jbeyK4D?=K@iGCkhn8#vEF8)GZrdg(HYw33Mnvjy?f3y3_!k{!4!_ zy;?-4ETzy3Q|CngwExbcOOz_+a>tiI9}vx-ulR6C^&lTE8Wug2AG5_L6EFg5{IutA zShDYhXbPKp7?O}dmOkDkO1G)pZA@ifNnbn-6=18ySSoTIlVhoOzTZ9fr9d0tc<5R^ zJ6p61B?$3QDiH_rcudpYtyLig)!ZV{Z?YoBaKmmn$%wqWo_yhG3cHVX?R*jS_-a>E zBKwlLN{SBofG8*B~_zAaG96V;W zxLSF0W-drnW0$BE&>_?@`blGLJ_>Q3KLP;o{bDf4<#eIr5?8Hg`K##cpXa zePH-_6UwgEQIE^{k}S4?`0r{17wt07)(%ji`yZH$TeS+REI@t}FL+b`oN1Dq6(ssi zdz1Na0-~7T2=*5{__vRT!}O&Q>^Hso16nL=n}-ZXmo(l)l%vJwKuh19QRh)I8Q7bL zMU5~HRhvD!P?CcvLnr$z-W|-ny7p$E##u7i%B>L;+XSORZPO4 zoa~;@za%(d_w!Vgp};-oglWwHaNQvnFDbQvR=hW<-wX3)=%yy^$50U@pS67{W|hzN zJ)`ChsaT42NV_U&$coYK+Jx3D{GdQIl*JO&mv>_$9?IH#9Vu_m8{z}j$?;$G+k_;n zO97piR;L!Y7DjoSPzDcwSxCy|>8YB4El!PIeHrw|qO)Nk*r&HKH>I=x=)`5wyfTY; zwE@=$TVZsred%6B;3|O}i|2TMMaCat&Wu5a<+#!_$&X(R_gY--Od6t2?Xj+b*JB;b5ZGfcXB4AE+|Mx^JcNx~ z81eeGBhG;xC~Wnl;Z^%D2b&m1#~54b^8%IMD=6yuPEYlBq!Fx6gc8fuOLM%jV1}7X zuRkpMih{54C;n6n3w7x z)FXsFuhTXL^(J&JIXqf&ZvxL#%5d(vQZjD1wey2Ek)^S1zVmvA>z{3+#*BA4r{c05 zN)*r4QO_@|V=`Y{OMXL*O3;y28G%AD9G&SF$gLGm78@- z<5|xtj02-7(BHp}6)RO+klk1r*Dpo+&i8cSpp=44OwsPQ&q8U^B(>67-egrrhKfAz z58+X`dIgmBeSYwyx4v`ho7g)UUohX(;XI(R27Q*X*|;*A zr^mFdIBfO~CN$c1yYoXxokP7~H=pdYs}OaS9?VOGM6%Trze&l3g<~caJ;G4rR@Wp< zUdjU!vJcfA=-O~evps*Z-GXXDCPa+f_n`;YpbriF5+6<)2>gEIhbKJ$vwi+Z1D zPs|rMn-U(ssG##W=m)vW06F=m=pU-^o=^<6U+KNXuX2LxA4B;R702ip5r?6n^ydW~ zC878JnqyVdSuTHJ-dKWQXcg5v-7vOu_#E_eX4|V_iXPT`h zoJ#+tQk|@#9c_)WA1mi#6LIff$I$kiE(Ix|O~14PT1q1>Vz{5pQu!tGh?$uBizAi0 z{ou_y-pW&9)l_voZ4*1drAS(V%;xVQ_=C5+=_QQW{&V$&S>YtxvxVxo)-S2nsZPb6MGRx zWatdw$IU?G;!cCG>)srO?}IMQX{rg?@OPHw2#tLBLbQOR9FW)j>9)>}IW#UVC97tY zY<|=vIxWf=!4|ArLAOrRQ!v=6&1tz;x`ka&9T|AbJs%_rrKlvAEcj~kHt4_Ph|kX$ z3YcXy27Cxzi@BEkInB+YIF&4#Mr{j!%_eOPMj>Vgaps)On=Rj?vJ-8EHOQmP=)hkT zZuJz2y38O#0MKei(e$4xEX@wGsBkmFOwOu*75+>lw7M(E!|wjnIh$vw^KR#(@%F0B zDm7T?KP}9@((yP{B4_Zj_cT~NWYzx!I>2N@!&kGgr%kDq}vBQ}ajrm5Fto5SGD$Hq~d19744kr?CUXb_7_0H%+! z6@z!+xS2+?Bd;)6u@hP}v!X5xS^O9qMr6TLcm}_oUxZbAL~-|FefNnvKc-jkf3?p- zg$c#1Bs_e^F^l1y38NtGE<$q54}JBC94Qvh2IbEu02XzP6ihegFJg>ZgTZC*&MHjt zJ#JdzAVlgSXU#SM;wq0B`F+nWJ|c*d4Iu*A<~M;P8?2|s zDkdLWbFDl52+X=ovx@LYWMb^fWG4!9q~v6-BDnx=#0#&!c*>!5ePTU`m!uUU>L=s3 z*RmM$#f><0-cdq{=h5A`fZDrohQyl^el*Cjg|8Q?%xn5nJsh3Vf|!-g^C zZAY;z2`m82=a2Ur1QK@m6oQ@ozBH6JZtdHAXA$NJZtZ2eNm%SI!+`Y4-5n#}rl>OZ zB{k&!OJMzn literal 0 HcmV?d00001 diff --git a/app/assets/images/slides/loading.gif b/app/assets/images/slides/loading.gif new file mode 100644 index 0000000000000000000000000000000000000000..3ae595e71bfdd3af31a407f4fe712322b42aa508 GIT binary patch literal 4178 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 literal 0 HcmV?d00001 diff --git a/app/assets/images/slides/navigation-next.png b/app/assets/images/slides/navigation-next.png new file mode 100644 index 0000000000000000000000000000000000000000..0858458e0c8af76e60e750c93643dbd06d200540 GIT binary patch literal 2191 zcmbVOc~ld39v^`PqH8ILR^7IS;gBjMlLG>gQ<4~j074K13J%EtS&~dh1`;U9wJNuz z9Ews!k);+xc;maC~9f}2^F_;pTBY>w6jYf#x5;ztK zL||cZLM!3|0QxZ^ekc~o^JNN92?^HekW>;Gjs^f1ca;nl#3L9n8i^H2UBQXVYLF-r zx`H7NJcuXrLgGZ+6gd)<;>Q=H#0#8-pt~EA^4aiB%4w^V__QUS7PSA^Srhh_XJmgyx&U<{S>QB=Ix0ReF+hAQGv z8PO}qfyjdeBB@T+mFI1=EJQ9!LWCSSDj~kfFH`gZ`~N%cw^-r-lQS~z3|ZG4|J5vu zM|cP7w(naX7v2vKBE=_0j*kZCxsL__4AkB%Prj<}pO8L zj=l}Aw8C$$UehPPWz}_bprLd8T*plP^ZJ`^TmAj_$u36xv-e5Tol3vj98UG~!otEq z7HDB(WAj^avFXFD{|`<9R&Z%-P=Y8Q}Ca zXYKg-$?W#hvNFP6jRom4|7my3IYMyo*oC_0=H@Q#vscFGWjgP&o15E${fjy{g|wg6 zacMw$$6_w6EAZn>8A`wTBhONr>jwq~f-aqUd3)?UkV%MHecc>P{v`Irqng3N!IP!& z2?=K~gYk>{kx}}ybm7#sXi9=gWeXPPI5C-KdB?7}IXb>r-hQ{Rs3=A|Ix41qlV9F= z_3Ej{^XFCinJp#&y6=~VL&L*A`&xmN!sEb!j)|EI?YC~-(|mQJvC%Obym#-OoxQ1W zDk&+c{YRg5nYDo@6v5GZ_8#BP=jXJwZ3Pb-*f-|{=YG~hk;PFU9KG* zM!cvoSQ~PnbM4x-ET>N!6RgftiGLV*ufM2QY6N~!n(Dndf8-c9>ul~=&i1G%^5e&k zr<ovRx^s1ZZ%vJLVF{b|%Z@L< z{Pw%=zc+hSLi1l{pW-*rA>5#CDIKW%Vq|1w6cav)Th%`|Hy5ctyNRCv-I9FMfMa88 zmb=PPnMbXn0EU@Cpk#wm{Hp#OZkJnpYeTEmg>S=@-keZ-W&iIH=Yrx8zD@rn~ zkIoJN>fJjOhNRe_1#qIq4v6Bc-1XA~ien%sv2K`|nNe$}R8n`#S$)IThwQC0JFYv7 zZ)myCAziJ?A3ghk`zS3Vz2M3EhP2S82Wc6bW^G#3B?sI3t^%oqG_Qm1(cVeP;@Tqz z*-qjrAET+E;EG%Gr+(E>2PRE+Jkz&<^8A9X4DTs7nM$16uq&!{{nrnKr2)6<{m;BQ zP-nft21I*u|sRo?Xo4x z{MxC1%^OdTj*gngeDs6Ttk?>e+XNJ*DEKZ bmKXvbD;aKIMf^t4{UUg?{aB|q@67r)m@J2h literal 0 HcmV?d00001 diff --git a/app/assets/images/slides/navigation-previous.png b/app/assets/images/slides/navigation-previous.png new file mode 100644 index 0000000000000000000000000000000000000000..4b704b6fe3cf12c4f5e94b794a43020320b2e1ad GIT binary patch literal 1978 zcmeAS@N?(olHy`uVBq!ia0vp^5DSr z1<%~X^wgl##FWaylc_cg49sbnArU1JzCKpT`MG+DAT@dwxdlMo3=B5*6$OdO*{LN8 zNvY|XdA3ULckfqH$V{%1*XSQL?vFu&J;D8jzb> zlBiITo0C^;Rbi_HHrEQs1_|pcDS(xfWZNo192Makpx~Tel&WB=XP}#GU}m6TW~gUq zY+`P1uA^XNU}&IkV5Dzoq-$tyWo%?+V4wg6Nh+i#(Mch>H3D2mX;thjEr=FDs+o0^GXscbn}XpVJ5hw7AF^F7L;V>=P7_pOiaoz zEwNPsx)kDt+yY-;xWReF(0~F4nSMoLfxe-hfqrf-$X{U9#U(+h2xnkbT^v$bkg6Y) zTAW{6lnjiIG-a4(VA$ce2&53`8Y};zOkkuW=D6f1m*%GCm3X??DgkBmQZiGl3@j}S z3=Pdq49txT%q$EI9nB1lT@5YG44hrf-3%?9U}j*`Yi#ObZsKNYVrgRFXlUqa;AG(B z>Sk>0=xS_WVr=YY0MqN4S6q^qmz)Z-Hxp&2M`=sgTG5P` zzwf@h^8QNkzG!S`XBWQydVHfww{dSB=NSWT!4{{5?F{iJ(l!UFO`fPVwd+cbnd;`7 zZ`e-OY>ld&?YErUV)YkihX>Ce{9MIw{`qI2l!;QkZA(`D7f}>if8Cn&_+w1yF?KVPlPd+Wm zdy*{wquM3mof>aSq_G4K_mXn;f>VqqT~rvlD_VUHTx!$RxjUa?jlZCpl&u3>WS^BAoNLW$Tyr(621t5)5|uZTiBw zZ=#Rd{6uZe)00hpX>B@W!w@fgl}Wdn>G(}{hWfs>8gKa59Fkq%VWjd|M^Epb^7-A3 z+)N8C&)Kp4;QsT|TIblU`KyX6tEztSIW%9H8Im{mz|kh<%FnY+XN4W#;y zU+hTZ{OWi1(x$$-?ZtfU&2rru$M666%eeY=`y4ZNKa~>p%Y|I?d?%G3x)sOb>^$jg z+TGK-LY+0svM#EH`8%8u3puk+=QJaOKZoS4i2--Je>QvQHLLJW%2mtsPI!7& z%k6`mN6mx`r-s*_8Yh#!8JzS{5b$U@{BV7R?&rA$SuxWsj|h3}b6m&Z@n`O$3uOhb ztEA=TF?$NBurJ~}vNz#TyPCcD%DzCw-3mJygyaPSF5Pxj^4ex9`SzRT{`>QrV%|pz zN`2;iYhqd;vL#bMh2h(_$zHSheO1B>)I}Cwd?EHc?5dE7g*;ce^3`8vMMevKYt$zN zt-O*I@a1C9<(D=GmO2-Oe*NCK$WzF)pKH?I%}vWOt+_uVqF-hY3bqA4WHP?J?YmA@HNI9Lf(P!c9Xq82`SuJe(l4IhJ z=eMK_#r`{%$Ku;}L}3-r!~Eh$wYP#=k22H=KQQ@{QIoRc%hkAjS|Vn@*jXpmI6cxA z;uJn&_$7~_hW+>cA2G2!`{V5Qh@5ku`}+yAtJB4WQF)Ail&j}HlL_0h_5SNkpMDBT z)PC7z@WX~-d6CbCXIkF_iv^fA%G_D{XtB@JC1TdSZycvLo_vyb?w@D^!$HQC26>G} QKS8yrr>mdKI;Vst025XEpa1{> literal 0 HcmV?d00001 diff --git a/app/assets/images/slides/pagination.png b/app/assets/images/slides/pagination.png new file mode 100644 index 0000000000000000000000000000000000000000..fad31716c3a491c7c80f0265caa058ca334a2687 GIT binary patch literal 1702 zcmbVNdr;GM9PdOoL1B{t^Fe0}L%>0s^c9*?U7;-$DKG0pa3^UKAhbC+aGSbTkewI@B90GKcDaW zQk)nc?ddVwgU91}>SEN%-0H=>{!?G&zDe(wtGHzrt4U#(&>5@)V+fuKr;P-lvtpS< zGJ)ZFt9~FNcs#cZ(vZTY=;KfmZ53cH9f8woQsW`yePMK9ScEV zT!l3&!DmjT=o5h`njrwG017ifG6;~t0$40T5F`{3K`t7I4_UDP>QYLg_HX$s4gjTC7u5oQUn@s%W#!I#B zhCCY~OeXAf4rAi#kr6Nf=5qJ%hFprAH)sMwaz()`YTA@zB`8*>R)XA(04H%2l7vGr zj7T6v1j)i-SS5qS8dxraqBMvW4v(DRco|kKRU;Cu6p~9I6%1>jNGMXH6^m6GF(eU- zwa^4sN7-47G7%GYNzSe$N`lBEr7{jH|3@qu#Sj=vGX|QrOmskE7R}Q3EZPP{Es+9x z%tTTy*;Srr(W(iC%q4IwLtBCI{G#Mb>~q2XN8Hb_`2We7kaI@pYL34(%fu1afv)X~ z*5`y5!$VNq#4y}wNZ^*sJl>>hIe+pM@aFOGaqli zHPTYudMveRaQ)eqla98gM>USN;4194W^6ro|4<&m?{41{Cym@IW8N9Xc zp7ZVNmaiYh-G^FWHZM=-zpbbDXiZJc5taYUnRm@Q9~QgkE?w%b)}2Qa549J!%iQBa?;U9#UI>PxTG)E-o;e&DFOX4ps518-8@24Za(Q?Ccf?T+Bi)WM`b{ z;0Fre3w@X>yP)I29>q6@6{Amk%Z+vW%$NDSy}h{|%7WvPg$o6u0|yQy$*O&qeTVm# z?>ol_!a_q6!~M15(#?I{h6S2?&L^>zdlZHSH|u00@WyB9P|U`S8(EtzJv}?Sq^PK< zdH$}e176c_ZHTS)=Fgp5;p3TkE$4%;>Yz1^ZoR5K%!#<5pdi1cNxAi@(i?4EUihUR zX7{n!S|e{Vp1N`+QaI1gk?!3S=VuK#>;42jtBbw> literal 0 HcmV?d00001 diff --git a/app/assets/javascripts/application.js b/app/assets/javascripts/application.js index d1bd28c..065e5d5 100644 --- a/app/assets/javascripts/application.js +++ b/app/assets/javascripts/application.js @@ -8,3 +8,5 @@ //= require jquery_ujs //= require pjax //= require active_scaffold +//= require slides +//= require_self diff --git a/app/assets/javascripts/slides.js b/app/assets/javascripts/slides.js new file mode 100644 index 0000000..ad0d0e7 --- /dev/null +++ b/app/assets/javascripts/slides.js @@ -0,0 +1,1055 @@ +/* + =========================================================== + + Note: SlidesJS version 2.0 beta 1 is not meant + for production deployment. Please download the latest + version at https://github.com/nathansearles/Slides. + + =========================================================== +*/ + +/* + + .d8888b. 888 d8b 888 888888 .d8888b. + d88P Y88b 888 Y8P 888 "88b d88P Y88b + Y88b. 888 888 888 Y88b. + "Y888b. 888 888 .d88888 .d88b. .d8888b 888 "Y888b. + "Y88b. 888 888 d88" 888 d8P Y8b 88K 888 "Y88b. + "888 888 888 888 888 88888888 "Y8888b. 888 "888 + Y88b d88P 888 888 Y88b 888 Y8b. X88 88P Y88b d88P + "Y8888P" 888 888 "Y88888 "Y8888 88888P' 888 "Y8888P" + .d88P + .d88P" + 888P" + + Created by Nathan Searles + + Documentation and examples + Support forum + + Version: 2.0 beta 1 + Updated: June 22nd, 2011 + + SlidesJS is an open source project, contribute at GitHub: + https://github.com/nathansearles/Slides + + (c) 2011 by Nathan Searles + + Thanks to: + Thomas Reynolds + Adam j. Sontag + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +*/ + +/* + Documentaion + ============================================================ + + Basic Markup Structure + ============================================================ + + For just images you can simply use: + +
+ Slide 1 + Slide 2 + Slide 3 + Slide 4 +
+ + Or you can use
s for your slides + +
+
+ Slide 1 +
+
+ Slide 2 +
+
+ Slide 3 +
+
+ Slide 4 +
+
+ + Simple as that. No extra
s, no navigation or pagination to define, it's all created for you. SlidesJS creates + two
s for the slideshow, ".slidesContainer" and ".slidesControl", both are required and can not be changed. + + Navigation classes are ".slidesPrevious" and ".slidesNext" and are created as anchor tags. These cannot be changed. + + Pagination uses an unordered list markup structure. The
    has a class of ".slidesPagination". This cannot be changed. + + You may define your own navigation or pagination, but they must use the same class names, + sorry it saves from including extraneous code. + + Basic CSS + ============================================================ + + No CSS required. Shit yeah! + + Initialize SlidesJS + ============================================================ + + + + Tip: With SidesJS 2 you need to define the width and height if it's different from the default (780px x 300px). This resolves many issues having to do with loading and makes SlidesJS 2 self contained, not requiring any CSS. + +
    + + Method Calls - The good stuff + ============================================================ + + Play: + $("#slides").slides("play"); + + Pause: + $("#slides").slides("pause"); + + Stop: + $("#slides").slides("stop"); + + Next: + $("#slides").slides("next"); + - Uses default effect + + $("#slides").slides("next","fade"); + - Define effect, "slide" or "fade" + + Previous: + $("#slides").slides("previous"); + - Uses default effect + + $("#slides").slides("previous","fade"); + - Define effect, "slide" or "fade" + + Goto a slide + $("#slides").slides("slide",2); + - Goto slide 2 using default effect + + $("#slides").slides("slide",4,"fade"); + - Define effect, "slide" or "fade" + + Update: + $("#slides").slides("update"); + - Rebuilds pagination + + Destroy: + $("#slides").slides("destroy"); + - Removes SlidesJS, returns to predefined state + + Status: + $("#slides").slides("status"); + - Returns JSON object: + { + current: 4, + state: "playing", + total: 7 + } + + $("#slides").slides("status","current"); + - Returns current slide number + + $("#slides").slides("status","state"); + - Returns playing, paused, or stopped + + $("#slides").slides("status","total"); + - Returns total slides in slideshow + + Options + ============================================================ + Check out the notes on the options below +*/ + +/* + jQuery UI Widget, skip past this for SlidesJS +*/ + +/*! + * jQuery UI Widget @VERSION + * + * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about) + * Dual licensed under the MIT or GPL Version 2 licenses. + * http://jquery.org/license + * + * http://docs.jquery.com/UI/Widget + */ +(function ($, undefined) { + var slice = Array.prototype.slice; + var _cleanData = $.cleanData; + $.cleanData = function (elems) { + for (var i = 0, elem; + (elem = elems[i]) != null; i++) { + $(elem).triggerHandler("remove"); + } + _cleanData(elems); + }; + $.widget = function (name, base, prototype) { + var namespace = name.split(".")[0], + fullName; + name = name.split(".")[1]; + fullName = namespace + "-" + name; + if (!prototype) { + prototype = base; + base = $.Widget; + } + // create selector for plugin + $.expr[":"][fullName] = function (elem) { + return !!$.data(elem, name); + }; + $[namespace] = $[namespace] || {}; + // create the constructor using $.extend() so we can carry over any + // static properties stored on the existing constructor (if there is one) + $[namespace][name] = $.extend(function (options, element) { + // allow instantiation without "new" keyword + if (!this._createWidget) { + return new $[namespace][name](options, element); + } + // allow instantiation without initializing for simple inheritance + // must use "new" keyword (the code above always passes args) + if (arguments.length) { + this._createWidget(options, element); + } + }, $[namespace][name]); + var basePrototype = new base(); + // we need to make the options hash a property directly on the new instance + // otherwise we'll modify the options hash on the prototype that we're + // inheriting from + basePrototype.options = $.widget.extend({}, basePrototype.options); + $.each(prototype, function (prop, value) { + if ($.isFunction(value)) { + prototype[prop] = (function () { + var _super = function (method) { + return base.prototype[method].apply(this, slice.call(arguments, 1)); + }; + var _superApply = function (method, args) { + return base.prototype[method].apply(this, args); + }; + return function () { + var __super = this._super, + __superApply = this._superApply, + returnValue; + this._super = _super; + this._superApply = _superApply; + returnValue = value.apply(this, arguments); + this._super = __super; + this._superApply = __superApply; + return returnValue; + }; + }()); + } + }); + $[namespace][name].prototype = $.widget.extend(basePrototype, { + namespace: namespace, + widgetName: name, + widgetEventPrefix: name, + widgetBaseClass: fullName + }, prototype); + $.widget.bridge(name, $[namespace][name]); + }; + $.widget.extend = function (target) { + var input = slice.call(arguments, 1), + inputIndex = 0, + inputLength = input.length, + key, value; + for (; inputIndex < inputLength; inputIndex++) { + for (key in input[inputIndex]) { + value = input[inputIndex][key]; + if (input[inputIndex].hasOwnProperty(key) && value !== undefined) { + target[key] = $.isPlainObject(value) ? $.widget.extend({}, target[key], value) : value; + } + } + } + return target; + }; + $.widget.bridge = function (name, object) { + $.fn[name] = function (options) { + var isMethodCall = typeof options === "string", + args = slice.call(arguments, 1), + returnValue = this; + // allow multiple hashes to be passed on init + options = !isMethodCall && args.length ? $.widget.extend.apply(null, [options].concat(args)) : options; + if (isMethodCall) { + this.each(function () { + var instance = $.data(this, name); + if (!instance) { + return $.error("cannot call methods on " + name + " prior to initialization; " + "attempted to call method '" + options + "'"); + } + if (!$.isFunction(instance[options]) || options.charAt(0) === "_") { + return $.error("no such method '" + options + "' for " + name + " widget instance"); + } + var methodValue = instance[options].apply(instance, args); + if (methodValue !== instance && methodValue !== undefined) { + returnValue = methodValue.jquery ? returnValue.pushStack(methodValue.get()) : methodValue; + return false; + } + }); + } else { + this.each(function () { + var instance = $.data(this, name); + if (instance) { + instance.option(options || {})._init(); + } else { + object(options, this); + } + }); + } + return returnValue; + }; + }; + $.Widget = function (options, element) { + // allow instantiation without "new" keyword + if (!this._createWidget) { + return new $[namespace][name](options, element); + } + // allow instantiation without initializing for simple inheritance + // must use "new" keyword (the code above always passes args) + if (arguments.length) { + this._createWidget(options, element); + } + }; + $.Widget.prototype = { + widgetName: "widget", + widgetEventPrefix: "", + defaultElement: "
    ", + options: { + disabled: false, + // callbacks + create: null + }, + _createWidget: function (options, element) { + element = $(element || this.defaultElement || this)[0]; + this.element = $(element); + this.options = $.widget.extend({}, this.options, this._getCreateOptions(), options); + this.bindings = $(); + this.hoverable = $(); + this.focusable = $(); + if (element !== this) { + $.data(element, this.widgetName, this); + this._bind({ + remove: "destroy" + }); + } + this._create(); + this._trigger("create"); + this._init(); + }, + _getCreateOptions: $.noop, + _create: $.noop, + _init: $.noop, + destroy: function () { + this._destroy(); + // we can probably remove the unbind calls in version 2 + // all event bindings should go through this._bind() + this.element.unbind("." + this.widgetName).removeData(this.widgetName); + this.widget().unbind("." + this.widgetName).removeAttr("aria-disabled").removeClass( + this.widgetBaseClass + "-disabled " + "ui-state-disabled"); + // clean up events and states + this.bindings.unbind("." + this.widgetName); + this.hoverable.removeClass("ui-state-hover"); + this.focusable.removeClass("ui-state-focus"); + }, + _destroy: $.noop, + widget: function () { + return this.element; + }, + option: function (key, value) { + var options = key, + parts, curOption, i; + if (arguments.length === 0) { + // don't return a reference to the internal hash + return $.widget.extend({}, this.options); + } + if (typeof key === "string") { + if (value === undefined) { + return this.options[key]; + } + // handle nested keys, e.g., "foo.bar" => { foo: { bar: ___ } } + options = {}; + parts = key.split("."); + key = parts.shift(); + if (parts.length) { + curOption = options[key] = $.widget.extend({}, this.options[key]); + for (i = 0; i < parts.length - 1; i++) { + curOption[parts[i]] = curOption[parts[i]] || {}; + curOption = curOption[parts[i]]; + } + curOption[parts.pop()] = value; + } else { + options[key] = value; + } + } + this._setOptions(options); + return this; + }, + _setOptions: function (options) { + var self = this; + $.each(options, function (key, value) { + self._setOption(key, value); + }); + return this; + }, + _setOption: function (key, value) { + this.options[key] = value; + if (key === "disabled") { + this.widget().toggleClass(this.widgetBaseClass + "-disabled ui-state-disabled", !! value).attr("aria-disabled", value); + this.hoverable.removeClass("ui-state-hover"); + this.focusable.removeClass("ui-state-focus"); + } + return this; + }, + enable: function () { + return this._setOption("disabled", false); + }, + disable: function () { + return this._setOption("disabled", true); + }, + _bind: function (element, handlers) { + // no element argument, shuffle and use this.element + if (!handlers) { + handlers = element; + element = this.element; + } else { + // accept selectors, DOM elements + element = $(element); + this.bindings = this.bindings.add(element); + } + var instance = this; + $.each(handlers, function (event, handler) { + element.bind(event + "." + instance.widgetName, function () { + // allow widgets to customize the disabled handling + // - disabled as an array instead of boolean + // - disabled class as method for disabling individual parts + if (instance.options.disabled === true || $(this).hasClass("ui-state-disabled")) { + return; + } + return (typeof handler === "string" ? instance[handler] : handler).apply(instance, arguments); + }); + }); + }, + _hoverable: function (element) { + this.hoverable = this.hoverable.add(element); + this._bind(element, { + mouseenter: function (event) { + $(event.currentTarget).addClass("ui-state-hover"); + }, + mouseleave: function (event) { + $(event.currentTarget).removeClass("ui-state-hover"); + } + }); + }, + _focusable: function (element) { + this.focusable = this.focusable.add(element); + this._bind(element, { + focusin: function (event) { + $(event.currentTarget).addClass("ui-state-focus"); + }, + focusout: function (event) { + $(event.currentTarget).removeClass("ui-state-focus"); + } + }); + }, + _trigger: function (type, event, data) { + var callback = this.options[type], + args; + event = $.Event(event); + event.type = (type === this.widgetEventPrefix ? type : this.widgetEventPrefix + type).toLowerCase(); + data = data || {}; + // copy original event properties over to the new event + // this would happen if we could call $.event.fix instead of $.Event + // but we don't have a way to force an event to be fixed multiple times + if (event.originalEvent) { + for (var i = $.event.props.length, prop; i;) { + prop = $.event.props[--i]; + event[prop] = event.originalEvent[prop]; + } + } + this.element.trigger(event, data); + args = $.isArray(data) ? [event].concat(data) : [event, data]; + return !($.isFunction(callback) && callback.apply(this.element[0], args) === false || event.isDefaultPrevented()); + } + }; + $.each({ + show: "fadeIn", + hide: "fadeOut" + }, function (method, defaultEffect) { + $.Widget.prototype["_" + method] = function (element, options, callback) { + options = options || {}; + var hasOptions = !$.isEmptyObject(options), + effectName = options.effect || defaultEffect; + options.complete = callback; + if (options.delay) { + element.delay(options.delay); + } + if (hasOptions && $.effects && ($.effects.effect[effectName] || $.uiBackCompat !== false && $.effects[effectName])) { + element[method](options); + } else if (effectName !== method && element[effectName]) { + element[effectName](options.duration, options.easing, callback); + } else { + element.queue(function () { + $(this)[method](); + if (callback) { + callback.call(element[0]); + } + }); + } + }; + }); + // DEPRECATED + if ($.uiBackCompat !== false) { + $.Widget.prototype._getCreateOptions = function () { + return $.metadata && $.metadata.get(this.element[0])[this.widgetName]; + }; + } +})(jQuery); + +/* + SlidesJS, let the good times roll +*/ +(function($) { + $.widget("js.slides", { + options: { + width: 780, // [Number] Define the slide width + responsive: false, // [Boolean] slideshow will scale to its container + height: 300, // [Number] Define the slide height + navigation: true, // [Boolean] Auto generate the naviagation, next/previous buttons + pagination: true, // [Boolean] Auto generate the pagination + effects: { + navigation: "slide", // [String] Can be either "slide" or "fade" + pagination: "slide" // [String] Can be either "slide" or "fade" + }, + direction: "left", // [String] Define the slide direction: "Up", "Right", "Down", "left" + fade: { + interval: 1000, // [Number] Interval of fade in milliseconds + crossfade: false, // [Boolean] TODO: add this feature. Crossfade the slides, great for images, bad for text + easing: "" // [String] Dependency: jQuery Easing plug-in + }, + slide: { + interval: 1000, // [Number] Interval of fade in milliseconds + browserWindow: false, // [Boolean] Slide in/out from browser window, bad ass + easing: "" // [String] Dependency: jQuery Easing plug-in + }, + preload: { + active: false, // [Boolean] Preload the slides before showing them, this needs some work + image: "../img/loading.gif" // [String] Define the path to a load .gif, yes I should do something cooler + }, + startAtSlide: 1, // [Number] What should the first slide be? + playInterval: 5000, // [Number] Time spent on each slide in milliseconds + pauseInterval: 8000, // [Number] Time spent on pause, triggered on any navigation or pagination click + autoHeight: false, // [Boolean] TODO: add this feature. Auto sets height based on each slide + navigateStart: function( current ){ + // console.log( "navigateStart: ", current ); + }, + navigateEnd: function( current ){ + // console.log( "navigateEnd: ", current ); + }, + loaded: function() { + // console.log( "loaded" ); + } + }, + _create: function() { + + // Error correction for only 1 slide + if (this.element.children().length < 2) { + return; + } + + if ( this.options.slide.browserWindow ) { + this.element.css({ + width: window.innerWidth, + position: "relative", + left: - (window.innerWidth / 2) + (this.options.width / 2), + overflow: "hidden" + }); + + $(window).resize( $.proxy(function() { + this.element.css({ + width: window.innerWidth, + left: - (window.innerWidth / 2) + (this.options.width / 2) + }); + + this.slidesContainer.css({ + left: this.options.slide.browserWindow ? (window.innerWidth - this.options.width) / 2 : "" + }); + },this)); + } + + this.slidesContainer = this.element.children().not(".slidesNavigation").wrapAll( "
    " ).parent().css({ + width: this.options.responsive ? "100%" : this.options.width, + height: this.options.height, + overflow: this.options.slide.browserWindow ? "visible" : "hidden", + position: "relative", + left: this.options.slide.browserWindow ? (window.innerWidth - this.options.width) / 2 : "" + }); + + this.slidesControl = this.slidesContainer.wrapInner( "
    " ).children().css({ + display: "none" + }); + + // Define the slides + this.slides = this.slidesControl.children(); + + // Set CSS for slidesControl + this.slidesControl.css({ + position: "relative", + width: this.options.responsive ? "100%" : this.options.width, + height: this.options.height, + left: 0 + }); + + // Set CSS for each slide + this.slides.css({ + position: "absolute", + top: 0, + left: 0, + zIndex: 0, + display: "none" + }); + + // Show the starting slide with a fade in + this.slides.eq( this.options.startAtSlide - 1 ).fadeIn( this.options.fade.interval ); + + if ( this.options.preload.active ) { + +/* TODO: loading image, need to remove on load callback + + this.slidesContainer.css({ + backgroundImage: "url(" + this.options.preload.image + ")", + backgroundPosition: "50% 50%", + backgroundRepeat: "no-repeat" + }); +*/ + var preloadImage; + + if (this.slides.eq( this.options.startAtSlide - 1 ).is("img")) { + preloadImage = this.slides.eq( this.options.startAtSlide - 1 ).attr("src"); + } else { + preloadImage = this.slides.eq( this.options.startAtSlide - 1 ).find("img").attr("src"); + } + + this._loadImage( preloadImage ).then( $.proxy(function( url ) { + this.slidesControl.fadeIn( this.options.fade.interval ); + this._trigger( "loaded", this.options.startAtSlide, this ); + },this)); + } else { + this.slidesControl.fadeIn( this.options.fade.interval ); + } + + if ( this.options.navigation ) { + this.prevButton = $("",{ + "class": "slidesPrevious slidesNavigation", + href: "#", + title: "Previous", + text: "Previous" + }).appendTo( this.element ); + + this.nextButton = $("",{ + "class": "slidesNext slidesNavigation", + href: "#", + title: "Next", + text: "Next" + }).appendTo( this.element ); + } else { + this.nextButton = $(".slidesNext"); + this.prevButton = $(".slidesPrevious"); + } + + if (this.options.pagination) { + this._buildPagination(); + // add current class to first pagination + this.pagination.children().eq( this.options.startAtSlide - 1 ).addClass("slidesCurrent"); + } + + this.current = this.options.startAtSlide - 1; + + this.element.delegate( ".slidesNavigation", "click", $.proxy(this, "_navigate") ); + + this.total = this.slides.length; + }, + _loaded: function() { + if ( this.options.responsive ) { + + // TODO: cleanup and condense + this.slidesContainer.css({ + height: this.slides.height() + }); + + this.slidesControl.css({ + height: this.slides.height() + }); + + $(window).resize( $.proxy(function() { + this.slidesContainer.css({ + height: this.slides.height() + }); + this.slidesControl.css({ + height: this.slides.height() + }); + },this)); + } + }, + _buildPagination: function() { + + if (this.pagination) { + // Remove the current paginaiton + this.pagination.remove(); + // Redefine slides with new children + this.slides = this.slidesControl.children(); + } + + this.pagination = $("
      ",{ + "class": "slidesPagination" + }).appendTo(this.element); + + this.slides.each( + $.proxy(function(index, element) { + $("
    • " + ( index + 1 ) + "
    • ").appendTo(this.pagination); + },this) + ); + + }, + _loadImage: function(imageSrc) { + var deferred, preloader; + var loadImageCache = {}; + if (typeof loadImageCache[imageSrc] === "undefined") { + deferred = $.Deferred(); + + preloader = new Image(); + preloader.onload = function() { + deferred.resolve(this.src); + }; + preloader.onerror = function() { + deferred.reject(this.src); + }; + preloader.src = imageSrc; + + loadImageCache[imageSrc] = deferred; + } + + return loadImageCache[imageSrc]; + }, + next: function( effect ) { + this._navigate("next", effect); + }, + previous: function( effect ) { + this._navigate("previous", effect); + }, + slide: function( slide, effect ) { + this.element.data("goto", (slide - 1)); + this._navigate("pagination", effect); + }, + _navigate: function( event, effect ) { + var to, position, direction, next, prev, pagination, $target = $(event.target), currentSlide = this.slides.eq( this.current ); + + /* + Slide to error correction + */ + if ( this.element.data("goto") < 0 ) { + // If goto is less then 0 + this.element.data("goto",0); + } else if ( this.element.data("goto") > this.total ) { + // If goto is greater then total slides + this.element.data("goto",(this.total - 1)); + } + + /* + Check if slides is currently animating + */ + if ( this.element.data("animated") || $target.data("slidesindex") === this.current || this.element.data("goto") === this.current ) { + return false; + } + + /* + Is this event coming from a click? + */ + if (typeof(event) === "object") { + event.preventDefault(); + + // Pause on navigation item click + if ( this.state === "playing" && this.options.pauseInterval ) { + this.pause(); + } + } else { + if (event === "next") { + next = true; + } else { + prev = true; + } + } + + /* + Set to animated + */ + this.element.data("animated",true); + + if ( $target.hasClass( "slidesNext" ) ) { + // Next button clicked + next = true; + + } else if ( $target.hasClass("slidesPrevious") ) { + + // Previous button clicked + prev = true; + + } else if ( $target.hasClass("slidesPaginationItem") || event === "pagination") { + + // Paginaiton item clicked + if ( this.current > $target.data("slidesindex") || this.current > this.element.data("goto") ) { + prev = true; + } else { + next = true; + } + + pagination = true; + + effect = effect ? effect : this.options.effects.pagination; + } + + if (pagination) { + // Get next from data-slidesindex + to = this.element.data("goto") > -1 ? this.element.data("goto") : $target.data("slidesindex"); + } else { + // Get next based on curent + to = next ? (this.current + 1) : (prev ? this.current - 1 : this.current); + } + + // Pass slide from number + this._trigger("navigateStart", ( this.current + 1 ), this); + + // creat the loop + if ( to == this.slides.length && !pagination ) { + // last slide, loop to first + to = 0; + } else if ( to == -1 && !pagination ) { + // first slide, loop to last + to = this.slides.length - 1; + } + + if (this.options.pagination) { + // Change the pagination + this.pagination.children().removeClass("slidesCurrent"); + this.pagination.children().eq( to ).addClass("slidesCurrent"); + } + + // Effects methods + if (effect === "fade") { + this._fade({ + next: next, + to: to, + currentSlide: currentSlide + }); + } else { + this._slide({ + next: next, + to: to, + currentSlide: currentSlide + }); + } + }, + _slide: function (navigateData) { + /* + Thanks to Thomas Reynolds + */ + + var isFlipped = navigateData.next ? 1 : -1; + var isOpposite = this.options.direction.match(/right|down/) ? -1 : 1; + var type = this.options.direction.match(/left|right/) ? "horizontal" : "vertical"; + var vector = (type == "horizontal") ? "width" : "height"; + + vector = this.options.responsive ? this.slides.width() : this.options[vector] ; + + var position = vector * isOpposite * isFlipped; + + if (this.options.slide.browserWindow) { + if (navigateData.next) { + position = Math.abs( this.options.width - window.innerWidth - position); + } else { + position = this.options.width - window.innerWidth + position; + } + } + + var direction = position * -1; + + // Setup the "to" slide + this.slides.eq( navigateData.to ).css({ + left: type === "vertical" ? 0 : position, + top: type === "vertical" ? position : 0, + zIndex: 5, + display: "block" + }); + + // animate control + this.slidesControl.animate({ + left: type === "vertical" ? 0 : direction, + top: type === "vertical" ? direction : 0 + },this.options.slide.interval, this.options.slide.easing, $.proxy(function(){ + // after animation reset control position + this.slidesControl.css({ + top: 0, + left:0 + }); + // reset and show next + this.slides.eq( navigateData.to ).css({ + top: 0, + left:0, + zIndex: 5 + }); + + // reset previous slide + navigateData.currentSlide.css({ + top: 0, + left:0, + display: "none", + zIndex: 0 + }); + + this.current = navigateData.to; + + this._trigger("navigateEnd", ( this.current + 1 ), this); + }, this)); + }, + _fade: function (navigateData) { + + // put hidden to slide above current + this.slides.eq( navigateData.to ).css({ + zIndex: 10 + // fade in next + }).fadeIn(this.options.fade.interval, this.options.fade.easing, $.proxy(function(){ + + // hide previous + navigateData.currentSlide.css({ + display: "none", + zIndex: 0 + }); + + // reset zindex + this.slides.eq( navigateData.to ).css({ + zIndex: 0 + }); + + this.current = navigateData.to; + + this._trigger("navigateEnd", ( this.current + 1 ), this); + + }, this)); + }, + play: function( gotoNext ) { + if (gotoNext !== false) { + this._navigate("next"); + } + + var playInterval = setInterval( $.proxy(function() { + this._navigate("next"); + }, this), this.options.playInterval); + + // Set status + this.state = "playing"; + + // Store the unique interval ID + this.element.data("playIntervalId",playInterval); + }, + pause: function() { + clearTimeout( this.element.data("pauseTimeoutId") ); + + clearInterval( this.element.data("playIntervalId") ); + + var pauseTimeout = setTimeout($.proxy(function() { + this.play(); + }, this), this.options.pauseInterval); + + // Set status + this.state = "paused"; + + // Store the unique pause timeout ID + this.element.data("pauseTimeoutId",pauseTimeout); + }, + stop: function() { + clearInterval( this.element.data("playIntervalId") ); + + // Set status + this.state = "stopped"; + }, + update: function() { + this._buildPagination(); + }, + status: function( key ) { + if (key) { + return this[key] ? this[key] : false; + } else { + return { + "state": this.state, + "current": this.current, + "total": this.total + }; + } + + }, + _setOption: function(key, value) { + switch(key) { + /* + TODO: This needs work, note status function use of this[key] + $("#slides").slides("option","pagination", false); + + case "pagination": + if (value !== this.options.pagination ) { + value ? this._buildPagination() : this.pagination.remove(); + } + break; + */ + } + $.Widget.prototype._setOption.apply(this,arguments); + }, + destroy: function() { + + this.slidesContainer.contents().unwrap(); + + this.slidesControl.contents().unwrap(); + + this.element.unbind(); + + this.pagination.remove(); + + this.nextButton.remove(); + + this.prevButton.remove(); + + this.slides.attr( "style", "" ); + + $.Widget.prototype.destroy.call(this); + }, + _trigger: function( event, current ) { + if (event != "create") { + this.options[event]( current ); + } + if (event === "navigateEnd") { + this.element.data("animated",false); + } + if (event === "loaded") { + this._loaded(); + } + } + }); +})(jQuery); \ No newline at end of file diff --git a/app/assets/stylesheets/application.css b/app/assets/stylesheets/application.css index e246dfe..6827502 100644 --- a/app/assets/stylesheets/application.css +++ b/app/assets/stylesheets/application.css @@ -5,7 +5,9 @@ *= require normalize *= require theme/base *= require web-app-theme/themes/default/style.css +*= require marketing *= require active_scaffold *= require overrides +*= require slides *= require_self */ diff --git a/app/assets/stylesheets/marketing.css.scss b/app/assets/stylesheets/marketing.css.scss new file mode 100644 index 0000000..6514f24 --- /dev/null +++ b/app/assets/stylesheets/marketing.css.scss @@ -0,0 +1,85 @@ +@import "compass/css3/gradient"; +@import "compass/css3/border-radius"; +@import "compass/css3/box-shadow"; + +@mixin slick-black { + @include background( + image-url("marketing/action/slick-black.png"), + linear-gradient(top, rgba(50, 50, 50, 0.9) 0%, rgba(30, 30, 30, 0.9) 50%, rgba(20, 20, 20, 0.9) 50%, rgba(0, 0, 0, 0.9) 100%)); + border: 0; + @include border-radius(4px); + @include box-shadow(inset 1px 1px 1px 0px rgba(135, 135, 135, 0.1), inset -1px -1px 1px 0px rgba(135, 135, 135, 0.1)); + color: #fff; + line-height: 1; + padding: 8px 0; + text-shadow: 0px -1px 1px rgba(0, 0, 0, .8), 0 1px 1px rgba(255, 255, 255, 0.3); + + &:hover { + @include background( + image-url("marketing/action/slick-black-hover.png"), + linear-gradient(top, rgba(70, 70, 70, 0.9) 0%, rgba(50, 50, 50, 0.9) 50%, rgba(40, 40, 40, 0.9) 50%, rgba(20, 20, 20, 0.9) 100%)); + cursor: pointer; + } + + &:active { + @include background( + image-url("marketing/action/slick-black-hover.png"), + linear-gradient(top, rgba(30, 30, 30, 0.9) 0%, rgba(20, 20, 20, 0.9) 50%, rgba(10, 10, 10, 0.9) 50%, rgba(0, 0, 0, 0.9) 100%)); + } +} + +.marketing .header-inner { + width: 77%; + margin: auto; + position: relative; +} + +#main.marketing-main { + margin-left: auto; + margin-right: auto; + float: none; + + .block .content .marketing-inner { + padding: 0 30px 30px; + p { + line-height: 1em; + color: #555; + } + } + + .marketing-text { + padding-right: 20px; + } + .marketing-images { + padding-left: 20px; + } + + h1 { + text-transform: uppercase; + font-size: 34px; + } + + li { + font-size: 16px; + } + + .action { + padding: 0 20px 20px 20px; + button { + @include slick-black; + width: 300px; + height: 60px; + margin: auto; + display: block; + font-family: "MuseoSans500", helvetica, arial, sans-serif; + strong { + font-size: 18px; + font-weight: bold; + } + em { + font-size: 13px; + font-weight: normal; + } + } + } +} diff --git a/app/assets/stylesheets/overrides.css.erb b/app/assets/stylesheets/overrides.css.erb index a9aff7b..40cedac 100644 --- a/app/assets/stylesheets/overrides.css.erb +++ b/app/assets/stylesheets/overrides.css.erb @@ -1,3 +1,7 @@ +#main .block .content p { + font-size: 16px; +} + #main .block .content h2 { margin-left: 0; } diff --git a/app/assets/stylesheets/slides.css.erb b/app/assets/stylesheets/slides.css.erb new file mode 100644 index 0000000..c1bf0dd --- /dev/null +++ b/app/assets/stylesheets/slides.css.erb @@ -0,0 +1,85 @@ +#slidesWrapper { +width:470px; +position:relative; +margin-right: 20px; +} + +#slides { +position:relative; +} + +#slides .slidesContainer { +background:#fff; +border:8px solid #fff; +margin-left:-8px; +box-shadow: 0 2.5px 5px rgba(0,0,0,.6); +} + +/* +Next/prev buttons +*/ + +#slides .slidesNext,#slides .slidesPrevious { +position:absolute; +top:134px; +left:-40px; +width:24px; +height:0; +padding-top:32px; +display:block; +z-index:101; +overflow:hidden; +background:url(<%= image_path 'slides/navigation-previous.png' %>) no-repeat 0 0; +} + +#slides .slidesNext { +left:488px; +background:url(<%= image_path 'slides/navigation-next.png' %>) no-repeat 0 0; +} + +/* +Pagination +*/ + +.slidesPagination { +margin-top: 10px; +position: relative; +width: 100px; +margin-left: auto; +margin-right: auto; +} + +.slidesPagination li { +float:left; +margin:0 1px; +list-style:none; +} + +.slidesPagination li a { +display:block; +width:14px; +height:0; +padding-top:14px; +background-image:url(<%= image_path 'slides/pagination.png' %>); +background-position:0 0; +overflow:hidden; +} + +.slidesPagination li.slidesCurrent a { +background-position:0 -14px; +} + +.current_slide { +font:bold 10px/1.33 sans-serif; +float:left; +margin-top:12px; +} + +.controls { +display:block; +margin-top:12px; +float:left; +color:#333; +font:bold 10px/1.33 sans-serif; +margin-right:10px; +} diff --git a/app/assets/stylesheets/theme/base.css b/app/assets/stylesheets/theme/base.css index 58a3487..797085a 100644 --- a/app/assets/stylesheets/theme/base.css +++ b/app/assets/stylesheets/theme/base.css @@ -18,16 +18,16 @@ .wat-cf {display: block;} /* End hide from IE-mac */ -h1 { margin: 15px 0; font-size: 22px; font-weight: normal; } -h2 { font-size: 22px; margin: 15px 0; font-weight: normal;} -h3 { font-size: 18px; margin: 10px 0; font-weight: normal;} -h4 { font-size: 16px; margin: 10px 0; font-weight: normal;} +h1 { font-size: 30px; margin: 15px 0; font-weight: normal; } +h2 { font-size: 24px; margin: 15px 0; font-weight: normal;} +h3 { font-size: 20px; margin: 10px 0; font-weight: normal;} +h4 { font-size: 18px; margin: 10px 0; font-weight: normal;} hr {height: 1px; border: 0; } p { margin: 15px 0;} a img { border: none; } body { - font-size: 12px; + font-size: 16px; font-family: sans-serif; } diff --git a/app/controllers/domains_controller.rb b/app/controllers/domains_controller.rb index 1afc0ed..b0a8b12 100644 --- a/app/controllers/domains_controller.rb +++ b/app/controllers/domains_controller.rb @@ -1,4 +1,6 @@ class DomainsController < ApplicationController + + begin active_scaffold :domain do |conf| conf.columns = [:name, :records] conf.create.columns = [:name] @@ -6,6 +8,10 @@ class DomainsController < ApplicationController conf.actions.exclude :show conf.list.sorting = { :name => :asc } end + rescue => e + puts e.backtrace + raise e + end protected diff --git a/app/views/fragments/_top.html.erb b/app/views/fragments/_top.html.erb index cd4b79c..b2bb7f3 100644 --- a/app/views/fragments/_top.html.erb +++ b/app/views/fragments/_top.html.erb @@ -1,28 +1,32 @@