From 49b138a8eb76bcb1ab83108791b0fec45ef28c41 Mon Sep 17 00:00:00 2001 From: Monty Taylor Date: Tue, 2 Apr 2019 14:17:18 +0000 Subject: [PATCH] Add a slide presentation for Zuul Graduation The OpenStack Foundation Board of Directors must approve the Graduation of Pilot Projects. Part of this entails a presentation about the projects to the Board of Directors. These are slides to be used for that presentation. Change-Id: I1fca7d760f11956e42a879bd1ba4a09d125df40a --- www/graduation/graphics/banner.jpg | Bin 0 -> 34836 bytes www/graduation/graphics/bullet-fold copy.png | Bin 0 -> 1761 bytes www/graduation/graphics/bullet-fold-dim.gif | Bin 0 -> 136 bytes www/graduation/graphics/bullet-fold-dim.png | Bin 0 -> 1762 bytes www/graduation/graphics/bullet-fold.gif | Bin 0 -> 136 bytes www/graduation/graphics/bullet-fold.png | Bin 0 -> 1739 bytes www/graduation/graphics/bullet-nofold-dim.gif | Bin 0 -> 131 bytes www/graduation/graphics/bullet-nofold-dim.png | Bin 0 -> 1740 bytes www/graduation/graphics/bullet-nofold.gif | Bin 0 -> 131 bytes www/graduation/graphics/bullet-nofold.png | Bin 0 -> 1739 bytes www/graduation/graphics/bullet-unfold-dim.gif | Bin 0 -> 139 bytes www/graduation/graphics/bullet-unfold-dim.png | Bin 0 -> 1777 bytes www/graduation/graphics/bullet-unfold.gif | Bin 0 -> 139 bytes www/graduation/graphics/bullet-unfold.png | Bin 0 -> 1552 bytes www/graduation/graphics/bullet.png | Bin 0 -> 2744 bytes www/graduation/graphics/example.png | Bin 0 -> 6652 bytes www/graduation/graphics/example.svg | 223 ++ www/graduation/graphics/face1.gif | Bin 0 -> 5279 bytes www/graduation/graphics/face2.gif | Bin 0 -> 2378 bytes www/graduation/graphics/face3.gif | Bin 0 -> 800 bytes www/graduation/graphics/face4.gif | Bin 0 -> 846 bytes www/graduation/graphics/fold-bright.gif | Bin 0 -> 145 bytes www/graduation/graphics/fold-dim.bmp | Bin 0 -> 306 bytes www/graduation/graphics/fold-dim.gif | Bin 0 -> 56 bytes www/graduation/graphics/fold.bmp | Bin 0 -> 306 bytes www/graduation/graphics/fold.gif | Bin 0 -> 56 bytes www/graduation/graphics/icon-blue.png | Bin 0 -> 204 bytes www/graduation/graphics/keys2.jpg | Bin 0 -> 42807 bytes www/graduation/graphics/nofold-dim.bmp | Bin 0 -> 306 bytes www/graduation/graphics/nofold-dim.gif | Bin 0 -> 48 bytes www/graduation/graphics/nofold.bmp | Bin 0 -> 306 bytes www/graduation/graphics/unfold-bright.gif | Bin 0 -> 170 bytes www/graduation/graphics/unfold-dim.bmp | Bin 0 -> 306 bytes www/graduation/graphics/unfold-dim.gif | Bin 0 -> 59 bytes www/graduation/graphics/unfold.bmp | Bin 0 -> 306 bytes www/graduation/graphics/unfold.gif | Bin 0 -> 59 bytes www/graduation/graphics/w3c-logo-blue.gif | Bin 0 -> 1791 bytes www/graduation/graphics/w3c-logo-blue.svg | 14 + www/graduation/graphics/w3c-logo-slanted.jpg | Bin 0 -> 26539 bytes www/graduation/graphics/w3c-logo-white.gif | Bin 0 -> 793 bytes www/graduation/graphics/w3c-logo-white.svg | 14 + www/graduation/graphics/zuul-logo.svg | 22 + www/graduation/index.html | 184 + www/graduation/scripts/slidy.js | 2994 +++++++++++++++++ www/graduation/styles/slidy.css | 405 +++ www/graduation/styles/zuul.css | 486 +++ 46 files changed, 4342 insertions(+) create mode 100644 www/graduation/graphics/banner.jpg create mode 100644 www/graduation/graphics/bullet-fold copy.png create mode 100644 www/graduation/graphics/bullet-fold-dim.gif create mode 100644 www/graduation/graphics/bullet-fold-dim.png create mode 100644 www/graduation/graphics/bullet-fold.gif create mode 100644 www/graduation/graphics/bullet-fold.png create mode 100644 www/graduation/graphics/bullet-nofold-dim.gif create mode 100644 www/graduation/graphics/bullet-nofold-dim.png create mode 100644 www/graduation/graphics/bullet-nofold.gif create mode 100644 www/graduation/graphics/bullet-nofold.png create mode 100644 www/graduation/graphics/bullet-unfold-dim.gif create mode 100644 www/graduation/graphics/bullet-unfold-dim.png create mode 100644 www/graduation/graphics/bullet-unfold.gif create mode 100644 www/graduation/graphics/bullet-unfold.png create mode 100644 www/graduation/graphics/bullet.png create mode 100644 www/graduation/graphics/example.png create mode 100644 www/graduation/graphics/example.svg create mode 100644 www/graduation/graphics/face1.gif create mode 100644 www/graduation/graphics/face2.gif create mode 100644 www/graduation/graphics/face3.gif create mode 100644 www/graduation/graphics/face4.gif create mode 100644 www/graduation/graphics/fold-bright.gif create mode 100644 www/graduation/graphics/fold-dim.bmp create mode 100644 www/graduation/graphics/fold-dim.gif create mode 100644 www/graduation/graphics/fold.bmp create mode 100644 www/graduation/graphics/fold.gif create mode 100644 www/graduation/graphics/icon-blue.png create mode 100644 www/graduation/graphics/keys2.jpg create mode 100644 www/graduation/graphics/nofold-dim.bmp create mode 100644 www/graduation/graphics/nofold-dim.gif create mode 100644 www/graduation/graphics/nofold.bmp create mode 100644 www/graduation/graphics/unfold-bright.gif create mode 100644 www/graduation/graphics/unfold-dim.bmp create mode 100644 www/graduation/graphics/unfold-dim.gif create mode 100644 www/graduation/graphics/unfold.bmp create mode 100644 www/graduation/graphics/unfold.gif create mode 100644 www/graduation/graphics/w3c-logo-blue.gif create mode 100644 www/graduation/graphics/w3c-logo-blue.svg create mode 100644 www/graduation/graphics/w3c-logo-slanted.jpg create mode 100644 www/graduation/graphics/w3c-logo-white.gif create mode 100644 www/graduation/graphics/w3c-logo-white.svg create mode 100644 www/graduation/graphics/zuul-logo.svg create mode 100644 www/graduation/index.html create mode 100644 www/graduation/scripts/slidy.js create mode 100644 www/graduation/styles/slidy.css create mode 100644 www/graduation/styles/zuul.css diff --git a/www/graduation/graphics/banner.jpg b/www/graduation/graphics/banner.jpg new file mode 100644 index 0000000000000000000000000000000000000000..3c960bdb166730a4a9211909902e4a06e771744a GIT binary patch literal 34836 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 E1N^5ldH?_b literal 0 HcmV?d00001 diff --git a/www/graduation/graphics/bullet-fold copy.png b/www/graduation/graphics/bullet-fold copy.png new file mode 100644 index 0000000000000000000000000000000000000000..9bc8994a2cb0b3bedaf19ad769bc70fcb7e3d788 GIT binary patch literal 1761 zcmbVNO>f*p7LGf*-&I4hRVq!2yJ{jQ7K&C@B$^Y>#K2dEV#! znAba%mF1I@&rS-0aI#b^tn&99zh{n5@Mr(x)m!}acu>3?3BnVnlKY78!Sz`|m=N6R zTD(?%9TDbbu+8c;)Aa(57KHN)-2jty8jE$>aQ&S0%dI<-=-N5yO|uNjL7q0<;#Np6 zZLL(v);fW3k-$`vusLMoaW zOD3veit{j|TDk$@IZ*>@RsmT>)n(N}20)r7jxLE?3vCCj7A}r#@vofJjNV$wCTsVEBn#eF++hyBy@w=Wxkj&;yP=`If*MBy5I#VtsjlT z!~>>uaiFLfkhnAe+9bsV?XWd4ZWD#Js7L)c;#f7s22B>TsL2kXPM04tz(ZRur#AN0 z;(4iwC|=s&Zj1u5FFLAj22@$45o?EpE^Tm`XA^G%ln*J6Sy*MPHBMAzELqIwlf*!A zu8fK6Cw{!VXBREtnC2vo05Y&-pjLr}^eh6Z3`_*T5L#xo>ujb_C)OcCv(zS}E@J~4vSAP+XY1IOp_!#wh&5>G z_3{1!BkiOPlKsOYVKc%x{*ea_%hFXF%7#fCS%-!$XC2d$4c#>8ypg2@I%BpsLYJRP z+}g{UsIobuRkvx~Hi1kb1+t;?2R7_^9$`zX0|y$K1CrVwloKkt5l{5y=rmoTS4N|j zD-J3MVUnDToJ5k6ptdxccK3Mq;g9vXt zTL0nlITV)aKd5y7xBgLpNE7=F${VgCB_1hBYZ|6U`FG|9YkS(*7|wfRGEAE?|47?9 z^*MFOoA#*}7eC_-|J_nyv0B_AfA#wdcWV>po;lX9+}nQX=gYI7<0(}8c>AO8j(#$A zW9H_G8$Uev{^Zeb``6HJuh;v!cJKM?;c2Nladqa&tz%Q&865!d)_cF-oz~ZG@AP_j zH#_~~Y^!#E`N4;s@2@RC*gpRB?Oz}J>8mr}oSAObPW(CdLRvu=IP%JG Wr-gUEtUs0fgi1>*g)c7D-u@egwk`4i literal 0 HcmV?d00001 diff --git a/www/graduation/graphics/bullet-fold-dim.gif b/www/graduation/graphics/bullet-fold-dim.gif new file mode 100644 index 0000000000000000000000000000000000000000..2e8b120a0fdeb812bb098028236ade030ea2bac2 GIT binary patch literal 136 zcmZ?wbhEHb)L;-{Si}GV|NsAIm-RG1@S9yi9>@lZF)03IVPs%nWzYd}L24P8eIs_= z`8T20bM;cg^{3Zfi?yhkd1KTlD4Q#LSKmTAujTX$6Jf*p7}WmU|#bo%Q%*y=#*tN_W%jN;stHN~BT`J3AilTCqK@ z?agj-X&0%`+#)VWs0W}y;)HVH)JhapoT)^A02eqQBvd30Af#nxzlcy<_JSqb9)@ebQ z61?h0x?#UQY3Z)KTNDnLF)5bY|N)+N$f+?&4RSV4T>A~npmVU z5wjTsU`5Z0IWwaenr@osL=`G|8Rlh01Bzkk&{9=#cuCA!?6}r?>B7(!`zlDyG>t4- zZnxW+ww9rBLsm@Fl%XoCDqskZY=lPE^jd_L%okBPO94xk=IE=TQMffTO>@+j*K~Y zyfyu|QlX_A0A?)+2T+?8gM(5u8JIeryFCfiwyjE- zq$tFsQYuJHRL1ihizrBkN-hszjv%0$**vIc6^D%w(U1YL?vTDNw!cJii^q`fAJncx zG2_j#P&|?vEzgM!>nAD!&Skog7vx! zG`1b+ZcYbv$25VKb#qzM&68YRkwgbuE{y}kip2|1gUC_Xki>t~6sb>Rn>sA!+Tr<1 zvA7mf*Ynvzvc7U&tSlD|#WW0{W)xogOa^ne>?JJG+r!gziCi6yd{69`sD&^;83hUR zk|2&Woc10U=7}5{(6*a|kv^qL2C#&>X&c34slie*St-g-@*qK5|Dk`PGWoyt4+D&w zC~OecaAk>mB=goZNRRyQ%=Om}wXqSL^+rA%H)ZxQZtEmu)G=$?@Ppo0tl{6Rl$NUH zUHn(Cw|Kucb?&8Oy@lKFFTMWD<^3n|pre*i2_mgAiW1`TPA@ZR754w~O}jvp=2oYY$c)ebWBn`pTml z$6vhr+cQ7kJM-O{S-*DT&-vF{;^(yoZ|+?^$o+BTqbsKb(7kxT|3a1J)zX*eYw!IH DPZBQQ literal 0 HcmV?d00001 diff --git a/www/graduation/graphics/bullet-fold.gif b/www/graduation/graphics/bullet-fold.gif new file mode 100644 index 0000000000000000000000000000000000000000..2e8b120a0fdeb812bb098028236ade030ea2bac2 GIT binary patch literal 136 zcmZ?wbhEHb)L;-{Si}GV|NsAIm-RG1@S9yi9>@lZF)03IVPs%nWzYd}L24P8eIs_= z`8T20bM;cg^{3Zfi?yhkd1KTlD4Q#LSKmTAujTX$6J~U@H zCcBqyihAgYf;gcbfc5|!s@{8m6)J~b=^1eVi6W$O+_N%ov2pIb$FkHd*OvScn&Y@--p+WLFIBJNiUsB?&qY>Zk>^&ImvBo z#2e0gmZ{kYcMMQx@my(2I7F%Wn>CUW2F`VsCIl@Tw7aWbtb@(2=d6_u65puFMK&6_rjL2Uyd3y9%ca$j}T!1%w*y`Z4LNesp%iQ05U0-5_>_FDHzoDYoOH0!qg&c)^s`kJ2zf zz_dOIG(Ce7mnJ~RIU4GDQ*;!s?SPe3?^B7R#%{p1I*-J5Ncq|h_v5n@V~kGs2HRnG z^(Mfjkds)14I#RdMAarNa;cOg#+J`Hgt~r0 z{dOWN-Nnl!=0znzs0i|AH*^CVd2ApR62oNwxOSPKz%dOI zCPtoelXKN#W?m&(Gp7~|J*V2pMrM;TyI@)qw)aC9jt}V`W=&KvU~KB#Kn0Fe!{(N1 zQf`APVyT5(&ft39LMRW>VidPT=n*Iu*CTDN1%6wR|5Z~GT@gBhLCmv<=c}bsEfg)c z3ky;G;;LL-D_Od2S*nrIliCLv;BLi@Akn+&X}ZL(q@%7Yk4h91nw*THLX(oj{L@Vx*kgv2MC9{>H_ACz~vU9Zl*~;Yq)}IELc8K5R&~P;+ z@kmQr(>Oiae=|2)JJiM|aOjQ6aN3mNW7^ia57Z$v?T^3tZVMXzm1=pVQMp0?9uAkj z-<&)D+VNrS!S%QPxP0boauRQTdHst=$8MjzvvBX_JHNj1$^5Y&hgb26dGF_|r?W8m=fhXNdVYU#fBD`(|Lu1F(csf-D^HexIQZ$8 a_^ul7ECym~kJ-Bj1s%Xe2dul)miRwnEK literal 0 HcmV?d00001 diff --git a/www/graduation/graphics/bullet-nofold-dim.gif b/www/graduation/graphics/bullet-nofold-dim.gif new file mode 100644 index 0000000000000000000000000000000000000000..8dd718f5544cf809c8566fc9b9142a8a590b9b6b GIT binary patch literal 131 zcmZ?wbhEHb)L;-{Si}GV|Ns9tKk%DfLLSHf3xEj4pDc_F3@i*fAPz_^1G9(6t~>uG zbb78{YPkON+H0{IH8XEaoOp7g^Xpx&jutt;sr@?j_T@F7C1iMS2>)jSkwkxh_8{Ixoqx%N3$Xop@}=jy+1)-6q>62rsKN65CrQ<8fkb>@l`? zlU*TgQwgM=s1PUA1F(D86WV(ZXocX=D?K9)AR&ZQegIOK$rmfsmRyMB%y{OR=Y8If zd3}3h{o1+3R~IEoI#;V!>U_M!pQUFO`2X*kI z&1}W^#+RgQ%oDy!Wjl2VP0}z;vM-muV-c?j`j4 z-g<-VZ4t*)mfw+!eZ&bunqj#gcB2&aOUj5B@wr%56?p{7wo1yXFeq=j8*-T?R5o)K zAX?s(3rBJ^B#5(sMY3STEw-JN6s~maLKx3zqjVA` z9x%0!V^zyR;nEc7x=)6N;S8N-YdhS^MDHVs)5dO0)jCbtc0%ad4vn&lQ)3>PosGAX z?#NS*sI*H%4okT(ZDuO&u#BZ0_832A+cR%sR8A<)SkhpuJ5AKaltnI=MPeNJl8Z?Y z3F^0ntjQ@_!5J+n0s$b;o72#Aq}xcd0W=YWW2noE!NVDz56ry4-<=2Qx~LYV8IB08 zRZ0pMl?wt7L0ljfZkd2U(*$`9`k-aB2=Mu<2Tf?xmOs+P&sP}P7BLj($F=J*!Z~JP zLLT((yiqU#ED#6ie!c)~NrhVmgen=sQs!qpoY2)aPsx0xs6Nhv6z}|p{<+HJ|JFYVFzMi^O?ksr z72%O8TGKc^>c2BL+B?<8rf}XH#dOw``OB=W(}+_iylEfDZ`63hPimFbM)fxNYdBo~ zuDNje<+H=$!6&P4{c+>)2%ksIuRs3k!I^{ehfBxLAO8By@lEl)sjaP7zPZx8^*0;$CL;g< literal 0 HcmV?d00001 diff --git a/www/graduation/graphics/bullet-nofold.gif b/www/graduation/graphics/bullet-nofold.gif new file mode 100644 index 0000000000000000000000000000000000000000..8dd718f5544cf809c8566fc9b9142a8a590b9b6b GIT binary patch literal 131 zcmZ?wbhEHb)L;-{Si}GV|Ns9tKk%DfLLSHf3xEj4pDc_F3@i*fAPz_^1G9(6t~>uG zbb78{YPkON+H0{IH8XEaoOp7g^Xpx&jutt;sr@?j_T@F7C1iMS2>)jSkwkxh_8{Ixoq2L?6@B@+s=qthv|UZ+rGT_W+v<;FHN#L zGke)irH7s@A_&rh+8*>$dhbCNsRyt2ED8!LLOpsA#((C^McQR929mtI_j|wp@Bi`s zxmnx1bZYUnML`fwRV(E>ywAhE^xOhGhZheX!0Y*_awQRj7hcKkXM|60pB01!!EbD( zTkgAv@F0gN_gJnMM1U5A<&|E9$qq|JkG1@;C_R4gwIuqqD7~L|RW~ZJwqMzg+2#Gs z2HD>s4wY8k7MFVn2m+R3u@`j01oev2h!?>)n^q)o1W9*_(pqLv+;VGTiN{RL=Pa3M zW?n2fIn6Rm$GITts%9&yt!Rd&O6gY)ut?Bsgxzg5zo7r_+du< zRwiq*i`n#k}cv zU?HhrS{JJuB};QGOV)E*R{J0W+^zTtB)UI2O_$l#$*ALtqY_1!WGAC2k*p*bl_t~v z6T&>7Lu1-*n*r%DRWgPpyqR`!%+^|vlKDzed71|a-aB6Zd}Z=~>z@Rev~k#C&~Ozg z^GL~B(>OiKe=|2)JJQCcaOjQMaMqOJW7gJL2-Gn&?N5H{_n_flt(Mmsm7C=6;c(@f z?S%`ko*dR5-gxtmD`&sLr_uHoH$H!K;?C*2OZQ*A`^)PeEuQ#(cn#ee3Q zpOG312TLEKTXpsK)prg*>;8D{i~*B>e)rOs&mJrvtll4JzuxIR8hm_x?eXfjhd=y$ aQds`$4RjH`R^J^1b!#>;C{yohO+9 literal 0 HcmV?d00001 diff --git a/www/graduation/graphics/bullet-unfold-dim.gif b/www/graduation/graphics/bullet-unfold-dim.gif new file mode 100644 index 0000000000000000000000000000000000000000..4b53c25722e97c6b8b802e589cad607f5108fdda GIT binary patch literal 139 zcmZ?wbhEHb)L;-{Si}GV|NsAIm-RG1@S9yi9>@lZF)03IVPs%nWzYd}L24P810r_a z`8T20bM;cg^{3Zfi?yhkd1KHkoaGe7l=*W_%Txe$Xj032d8=l}o! literal 0 HcmV?d00001 diff --git a/www/graduation/graphics/bullet-unfold-dim.png b/www/graduation/graphics/bullet-unfold-dim.png new file mode 100644 index 0000000000000000000000000000000000000000..d596781f92b0fc93dfde33a576ac8771a1f7008d GIT binary patch literal 1777 zcmcIlU2oe|81}>zpzE?qtDrELEboFM&GAPZ$2JKibGjxHE>Rb0-4!`GK1r-5KA!C~ zX^|*F+C;gkxB;QwuobCSsBk+ZgvNHk4M^}8;0g&Ogb)ZRyw2Aqv{kvmlI`Pjp7XrV z`*B|HmR46z&pbcFFwE&*2cfx`AmcfoxhOiEhgSG{a<;x*ozCBxI|k?zma**E?TvtYc@nt0_ygJd-q>!nRMY zY_FE__6F8%Zs}Dv(=~vgMMA`OTTM4Gx>;_(Yrr^~7C3eQ2{*D_E;7ijTP4<{K4DV{ zmB*5jV$*s;Qj?0VUu0!b(gaZxq$Dq?h9VlW%#JP&toe4$Sj%4?*@CYu*9b$;5QI*r zljtN9)UOMYuIqv*3$n}uf)BRb5OsMsxG-kOlK}gU7dq5sBSuuE?J&!M(xD42Z$j$^ zqcB0hgf8*~DIrEKje(YRJhauCpo4IE6ReE%K9V>nZ+S#mBLQvum@ID+H@q-5X5-0T zukAMnp4wO-P0|8b0K%k+DX&388Z_u*{Fp3HyzvavCn%(TnbPJsQKc~pYnoAFbav4~ z*l{E3mm^uDT_le}lI0=vN>iYG$82x-4jdoUe3&&-Wdmcns@J5d zo#e5iV_uPn&ZBfH$?GaYnyg7lr7Cf(jg1=hTL_B9X`wn1Jh#rV57d~nNqvjj5Oc8l zV7_RYC7;%uCM*PNE0@^fvZ+eCs`7F|ifSKZfV%}JfJASNPSX`~eKcx1?4U#qgrk#@ z<#1FI#O6lR&LhG+okK&~PJ;mHF;y~z1+*4+kWX@TNXc}iC_K)C0Bs(xf4VaHzx9s- zj2ps7kMN^t!bDZ;lG(1tUc7m#&GD3(Qwj~;bYR)i3`*|H0}MB-@k)~|6wto zD;IY0KmGpF-Ae4@Gf(z2w{PZN`sLceA&MK7TQ@%W@#O9J!Tize!A~!IFmv*U{yWBA zuh;v!a__}`|5>gayE^~odw<-WJ6Dc>6N_cue{P{<#_y}^U+(sLXiuB_`J+>xzwN2B zvwtt1FURv|vay@FxqGnjw{OoJKCzS8dF`kt9o||vx6o!kt$hE=-u0vOUnk5z&%d?* T#SQp(F-&oJHUHVA%Devp7cMdK literal 0 HcmV?d00001 diff --git a/www/graduation/graphics/bullet-unfold.gif b/www/graduation/graphics/bullet-unfold.gif new file mode 100644 index 0000000000000000000000000000000000000000..4b53c25722e97c6b8b802e589cad607f5108fdda GIT binary patch literal 139 zcmZ?wbhEHb)L;-{Si}GV|NsAIm-RG1@S9yi9>@lZF)03IVPs%nWzYd}L24P810r_a z`8T20bM;cg^{3Zfi?yhkd1KHkoaGe7l=*W_%Txe$Xj032d8=l}o! literal 0 HcmV?d00001 diff --git a/www/graduation/graphics/bullet-unfold.png b/www/graduation/graphics/bullet-unfold.png new file mode 100644 index 0000000000000000000000000000000000000000..7cf1c64e7de11aacaa5e8084a2617cb640df3fc4 GIT binary patch literal 1552 zcmbVM-HRJl6rW;^y4|J=t{SbD%k-fubUu?zGS?l~?PS{oI&0Vt>=p!bGjo#+o0&VE znKaoI+(xK$eOi1dB7Lz|s4ry&-ztdI^}#1W5&r>w67;1HEkeALk6|nItAWYfx%YQ| z=lsq+=WJJ(&m5k5VTxgx!pFbQc-E~+{S8R&X^ zF)EldkmY!>j+ggY;S!3l#!`gHi3%r5rl`Pd5sDHg=AkH#pa!v>#zq2FIgwtmYDzLi zzpf9dA32oPiN-w}mO`Kh(tt7LrEPMFC!H(ro>=;uEL>A#UA~7~!uvhiCiR zd;+JlBVHy$i+&_y4|{ah1$3z0d*a literal 0 HcmV?d00001 diff --git a/www/graduation/graphics/bullet.png b/www/graduation/graphics/bullet.png new file mode 100644 index 0000000000000000000000000000000000000000..cae402eb62a7d01c8e7d554eda6a1e9dada4eb7f GIT binary patch literal 2744 zcmcImc~leE9v+M$3fLZ@pjPNOP^Cx1Og2bzh$sXMN-#nccnWngGl7_7CM3faRK$&< z2BZZy7FQIH3i=RuZbeQJ6-8>5x>V{?TND>Wi&9$TP1x#r$9nkZ%{eo-OMZ;bdEtchJ8y}2+7VY4j$(&w-!)=NN%UDSIqT$4F;(j-TXc)}S+d9jamnYy z;?8fs_0p;AtE~D@73~gL9qrk5byC(_>5Bjo+4iyXQO;F^O~*7(&pTe%H{N<4rY$g+ zeVf|!=1lvWGp&~$Jj?SXO(ENmU)HbuVkhS#%lvH@pLnKh643wNuNxJ6GHM2pCuu@E z!tec@;{`-k!4);P|Hb>9WuKS1s$03Vag}l8@oQUJGdDj4l0F-E=HstN?fTB2Khx&o z){N|B&Y82$FQBVm%g`O}Qb+TSnOES>IEF3+zRy~O&?fSDGDqj1g)?r3nyZa%_x4_{wb=A)wes8FFz2lSL=K}>`$F8ZP z?Ps}`?sprP9bDNKTN67en{IB%yZqZKQgOGi>@%;R!nW4hr!q3*Rn(F6(yTAdC8ulb z=+)f?^ve?2yq@#+8ynrFTc0?50W5*t~cW<+uDtLRg#O2bH z1Hr7VZDaiwz|{qQiN|91)p_TRU$F;#{Z-2z*9gDq#ZGBKi}p#&A8DIiFsJRx6D18$pT*|@3kwB$-cM^|J{ zRchIW3OF`8ts~`}r1@6xkxSFsFWks{?wGLWlx6?QxjoxY?lAjzE@(^cbnE1GYC8+N z*O|veNXlasH4ADY{1?=0Dr#;>E=_#B4_h(s4sm9SFu4BaQa=*6Sn9tC-rX2?*f(hc ztKP*!tBWsMyaaw;+$apYwDZ@>J*RIvD%{nR($-Zkb8s#APPTkRgYZ9-W4^w2*f~a( zIbn(MRPx4|S9b(AJ&u-G4pP_BI^DWgN?H~*S3inA6M1(}t4m9mc3lYJm9rM;No+5r zBDK3u@bb;|p=re)jk9mGJ@&bjjddqgy4dcAS&y3<4!VzHHq6y&J>-~CiXUT0?Eb5x zt*|0J9&>UOI-Tu4aQo(uVJQzK!at8Uzlba7wF~;geRV@w(ba3W9pY;)H{ES%G&j;8OnbMXRG#vqF}0f4=e^|k?a6ixsD+YuUN6dffG z6=Rg%8^tLV;hmy4FlYeq^G`9Ln3kYH6%nT)B~bgR8VJgi8;J;W zm=ZHGinU9h9W^LBdVej zX$izA?RP!}^C;DF1K$0|Cb3Q8JETS}qJ(J%X*x zsXsmN|7Nc5+dGYH5YBW*>u{(oGcQApogf)%Bh$8Tn4jHeT0TESI$J5UV1M=Y`m+Q! z_AC}_&AD2CC8u+(#NNY6;1FQD*EV~SaM``mjJ>u2fJfya0I+Kt>+$`Y$X(X|jF6x( KX<5M1)&B(@uO80; literal 0 HcmV?d00001 diff --git a/www/graduation/graphics/example.png b/www/graduation/graphics/example.png new file mode 100644 index 0000000000000000000000000000000000000000..7ce9b3ffee0d58e6d8c2b1e09ca814fa7483e1a5 GIT binary patch literal 6652 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 + + + W3C Indian Office logo + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/www/graduation/graphics/face1.gif b/www/graduation/graphics/face1.gif new file mode 100644 index 0000000000000000000000000000000000000000..04e50cd79749153fe9eda6d18558beee586b11fd GIT binary patch literal 5279 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 literal 0 HcmV?d00001 diff --git a/www/graduation/graphics/face4.gif b/www/graduation/graphics/face4.gif new file mode 100644 index 0000000000000000000000000000000000000000..3f687402ab0e8379da8d37367701362a24d7907f GIT binary patch literal 846 zcmV-U1F`%^Nk%w1Va)*f0HFZ@00030{{a900RR60A^sIZa%Ew3Wn>_CX>@2HRA^-& zM@dak03rDV0SW*D04x9i007MZ`2YX{{*;fY%k2-NoV41Dv);V>4~F7Mmgb43>dLn6 z3&-+I*Y=I)`p)(tOe&Ymrt=AnN~hGS^@`1Ex7@Dx3l59N_^!OfdmU0Jcux% z!h8W5I!q?Op~QwVDq6glV4_C;hZsA0RIxFnhLI!>glt$crOK5CPKIO&vw=&AF>Bg% zFmvP0nmHxz{CTsdMxZK%N+gO@r9%Krn>uAGQG?VA5}#TH&~U2Oty~32y!v!v*RcsE zf_2)EtlG5>B%W#(-&-47=AoynW^ z#J&!L8#g|&Z_eWwCiZp6JUZ=(eT`bbZry;!z7C~(XFahm_VMJ6_HFn*y$0)j+q-`c zpQ%vw^etGAk3T>Dp7s9wQ)mcafC2`fUx5amHQ<2$EjU4f10D!rgbo78V1*J)*ieKT z7C51W9#W9th9br{U~nd$r~!Z@uGpS{D82}z1OSRi<9hbp@znkU0YA zW06+{C}ff^0%&BDO#!H6lqWXiq>~LviDhsYZpmerUV52jn7e&RW|?LVC}x_voylgK z391QaoN~@dXPtK5iD#aA?#XALe*Ot)pn?ucXrYE4ifE#WF3M=5jy?)$q>@fbX{DB4 zifN{rZpvw=o_-2ysG^QaYN@84ifXE=uF7hwuD%Lutg_BZYpu54ifgXA?#gSgzWxeq Yu)+>YY_Y~3iwSJ9$}Y=nngsv=JBBEm8~^|S literal 0 HcmV?d00001 diff --git a/www/graduation/graphics/fold-bright.gif b/www/graduation/graphics/fold-bright.gif new file mode 100644 index 0000000000000000000000000000000000000000..7e38faa8ba143f807aa48965da5b05b6dc2e3ee2 GIT binary patch literal 145 zcmZ?wbhEHbRAf+OSjfx(2LI2T`G4Zd6UCn_j9d)N3_2h|kURrZQcM5J({J-z=4`p8 zEpRVp5nq&thnI(^Qbxxbg-2x`XB6|=@5n65_vm-@VLGztV~2{Lz~m*DEggO4g*;|q t+@p{u!&2V-BT3*9_o5uf1=<~^tPkfYJQ8AwZP=mwZoiQX&)EL Ii!fLN0B3C!`v3p{ literal 0 HcmV?d00001 diff --git a/www/graduation/graphics/fold.bmp b/www/graduation/graphics/fold.bmp new file mode 100644 index 0000000000000000000000000000000000000000..6ba9e56274fa4d8cfa89b5e74bb90efcfc77b043 GIT binary patch literal 306 zcmZ?rHDY7{12Z700mPh8%*Y@C7XJez5A#7VSb#9`|L|c<1l5Kq0Tdxpj)CDnG9p?Z LhI5Fp52r5y%r$qx literal 0 HcmV?d00001 diff --git a/www/graduation/graphics/fold.gif b/www/graduation/graphics/fold.gif new file mode 100644 index 0000000000000000000000000000000000000000..133e594fd0d939fd646d089d3bb037601e0ec93c GIT binary patch literal 56 zcmZ?wbh9u|a>QWZRN6Vp?JQWH}u3s0un02Oft_=LFbIC8Ib?(zTs|Nmsr`3@9h zE(!7r{{Nrh`YB$ZfecojE{-7;w~`W+Bn>7kZ58Bh@JeD_9ObsPCreT<>P7G&9(COt v%|a|2*#EDX7O1;8s;ynjYKj2^BOAja87|H4rQHHRQy4s5{an^LB{Ts5_n$!T literal 0 HcmV?d00001 diff --git a/www/graduation/graphics/keys2.jpg b/www/graduation/graphics/keys2.jpg new file mode 100644 index 0000000000000000000000000000000000000000..4739be00a0b3433b3522594a1362cc9e8f592c0c GIT binary patch literal 42807 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 literal 0 HcmV?d00001 diff --git a/www/graduation/graphics/nofold-dim.bmp b/www/graduation/graphics/nofold-dim.bmp new file mode 100644 index 0000000000000000000000000000000000000000..8a12826b1bbd1c79bf99f73612f595d8b1751a9e GIT binary patch literal 306 zcmZ?rHDY7{12Z700mPh8%*Y@C7XJez5A#7VSO7?z!3{ui|6jkxL_qPOB!|m~3;-8C B+b;kB literal 0 HcmV?d00001 diff --git a/www/graduation/graphics/nofold-dim.gif b/www/graduation/graphics/nofold-dim.gif new file mode 100644 index 0000000000000000000000000000000000000000..996fb5edaba3d31384c844941e262fca1797fb07 GIT binary patch literal 48 zcmZ?wbh9u|p143Yd;K}WkeXP0bIcj A!Tn~>z7N)VL5 cBB3S-)@a<{9 literal 0 HcmV?d00001 diff --git a/www/graduation/graphics/unfold-dim.bmp b/www/graduation/graphics/unfold-dim.bmp new file mode 100644 index 0000000000000000000000000000000000000000..c2a6bafa22d7f261c72545f2aede6d8ecf182a10 GIT binary patch literal 306 zcmZ?rHDY7{12Z700mPh8%*Y@C7XJez5A#7VSO7?z!3{ui|6jkxL_l#=xxOe-XUlXYh;v9VTAvqXoCXm7k7yz?a*k1qu literal 0 HcmV?d00001 diff --git a/www/graduation/graphics/unfold-dim.gif b/www/graduation/graphics/unfold-dim.gif new file mode 100644 index 0000000000000000000000000000000000000000..bee56711710516d16c9419285b0810079894116c GIT binary patch literal 59 zcmZ?wbh9u|@~ literal 0 HcmV?d00001 diff --git a/www/graduation/graphics/unfold.gif b/www/graduation/graphics/unfold.gif new file mode 100644 index 0000000000000000000000000000000000000000..0753ae4d2c6a05d02bf3ece0c06d46fe03ce9f1e GIT binary patch literal 59 zcmZ?wbh9u|APd_=^+j!xJm!r1U zH-CR)S~J^4)t*W;EMOlXgqM^_;BR`L?N| zsYSwDq&Xw=DCea#?BLnAKswAZ(t%DDv%N4t}y=c5vMb(v=x66vZDtfK;hmriy zgKmDb3?jLDyOL6xr6r|o0mYV7P%_&IR>2f=J$&DfRh?(iS-^Hjqkvk(t43abI zL0cAMXUkc;tk~OV8*M~cvZiD&o-2l(8tHLAo^TA385@qb)&O?Fd$rHB$Ay*fEqY6{ z+CunmDSywvl(6$ZAFA<OrblwGNg z8r|9q#7*b2t+}L?^*_<9Xd^9L5v3jd{jWLPIx0amU&uZ3gf+-Zsn>JlP#tsgm$ii? z5%P>n?8zcLaj%E9D8CALN_v?I&9Q(sJVJd*&3gEfW#4jD29@y9HO$>p>}=3&oi<3E|3EGAD`>QIyq& z;-HN?&Za=C4h+NK6~G%>U5#$ABg%3UbOxl3*NZAUB+2`XXsRjw70>|_qj1w{$+Ml2bGpO==D#~v4#T@7Y>$XgRX9VPUfhG+E!p)2BsvA zdPk&0UuyvF>t5w|Qap@)mTN1{-|RlWC;?HiW%Sc#ndweEv z|DLTiUO&|j37@RrPvY}>x8EIq45Jk984vgmG~N=<#Kcd;SDzjD{FYGt+Q;w3*ZAFN z{(J!L=<|=(1-i0fxFyx&G@?guT-cyLmoffn;_9@)_QKz)m9dlYBU=(%SB=`1%%4X0 wo+YqS-e&G + + W3C logo + + + + + + + ® + + + + diff --git a/www/graduation/graphics/w3c-logo-slanted.jpg b/www/graduation/graphics/w3c-logo-slanted.jpg new file mode 100644 index 0000000000000000000000000000000000000000..54e0ac361f274c598f320073c98f8842adc73069 GIT binary patch literal 26539 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 W_4Fyi;{Wdlp*lAI%N;4dr~eI6#cTio literal 0 HcmV?d00001 diff --git a/www/graduation/graphics/w3c-logo-white.gif b/www/graduation/graphics/w3c-logo-white.gif new file mode 100644 index 0000000000000000000000000000000000000000..3b3c6fd0261196ecf14cc338f0a3ec20a1e27016 GIT binary patch literal 793 zcmV+!1LpikNk%w1VOanq0OJk-K!ddqWTNl&`QPgEzt-j;Z>TVNub;u%&*1EUt`NWkGIrNj=TT=|NsC0A^8LW000jFEC2ui09gPe000F3(0~cdyBJGqv&R7?jwDcg z=yztp>LpGb2k9a^L+UYi@81bjKtUiJ6d%G0fH))w3{RnlL^XOH-DB|U0zV2tZven3 z9F2zoK{TQew}nnDi)sztyd!%#caZ^HK?eW{2mk_Q9)2=3C>pgha{Y?9)WtT4hIhk2~UWt7jQDAD0DG)D0nw%v$hTbtFbr= zG(*e+D+h!HNWP3QE*_9Fk|>lh0_3M2wg-+N;SQGoYh z2P6bqYTQ8hA%G8D|FF#JXYB*00qx%GOPHaXgKz$Qe4P964hOz_83@Fvq9Y?m5Ga5B zP?n*eu?qk@rGPW;rB4j`Vlc!ooU}k|UpqRU!m|d9R3FM!3k)0*%K#s?z848q)5zm0Y&m5DMgNLDCfW$973TXEl zc0y(hn7JtF5v~rd4p^r3tz&jSzySHW)IspZQRXj2`+&>0;LpC;p)#8a?hn+>y~8J* zEhGJd>OQ7xQQ2O;`VZP=7~kSUn9qJt*vQusSW%7VfPCyFho25bwP%2TFD-CWSRO&B zK@Ynjb$}SCJpc`D1nif>8Hz>K;7U3$b5u77Ot+Lo1c|ta46vD%VG7XDbYdqN1+bY; z7udiSIsw7P$aSWe^8$tmOrU^)`_MuFf$!Pa;ZF@N_W>|SmQ_g|9vDCe0tqw#fC9nY z;0$wcT&05_TKf29muhr}p)Y}*L8lZZ39*_FL#9UG4@!jR5S2+xI1qBp9B?HD03f%3 XjF91pLIDD1AcCb@gz#uW5dZ)?A@5II literal 0 HcmV?d00001 diff --git a/www/graduation/graphics/w3c-logo-white.svg b/www/graduation/graphics/w3c-logo-white.svg new file mode 100644 index 0000000..d63907f --- /dev/null +++ b/www/graduation/graphics/w3c-logo-white.svg @@ -0,0 +1,14 @@ + + + W3C logo + + + + + + + ® + + + + diff --git a/www/graduation/graphics/zuul-logo.svg b/www/graduation/graphics/zuul-logo.svg new file mode 100644 index 0000000..ded6d34 --- /dev/null +++ b/www/graduation/graphics/zuul-logo.svg @@ -0,0 +1,22 @@ + + + + + + + + + + + + diff --git a/www/graduation/index.html b/www/graduation/index.html new file mode 100644 index 0000000..8b70d83 --- /dev/null +++ b/www/graduation/index.html @@ -0,0 +1,184 @@ + + + + + +HTML Slidy - template for basic presentations + + + + + + + + +
+ +
+ Zuul logo +
+
+ + + + + + + + + + + + +
+

Zuul Presentation for OpenStack Foundation Board of Directors

+

James Blair
+ Monty Taylor +
+
+
+
+

+ Hit the space bar or swipe left for next slide

+
+
+

Strategic Focus

+

What is Zuul?

+

Zuul is a program that drives continuous integration, delivery, and deployment systems with a focus on project gating and interrelated projects.

+

It is a distributed, massively-scalable, multi-tenant, multi-cloud service designed to be run on the open Internet safely and securely.

+

Mission Statement

+

To provide software and processes to automate continuous integration, delivery, and deployment of interrelated software projects in a secure manner using project gating

+
+
+

Technology Overview - Use Cases

+

Zuul is focused on project gating, especially in scenarios involving multiple repositories with + integrated deliverables. Zuul tests speculative future states that would result from landing a change + rather than merely the change itself. In this it is unique in the industry.

+

Zuul is a scalable multi-tenant service designed to allow consolidation of administration functions, + common shared libraries of content and shared test resources while empowering distributed development + teams to operate autonomously.

+

Zuul content is directly sharable between Zuul installations.

+

Zuul is flexible and avoids assumptions about how software is written or deployed. Baremetal, VMs + Containers, Network Switches and Kubernetes are all primary targets that can be mixed and + matched. Zuul believes CI isn't just for net-new "cloud native" apps, but should be available to + everyone.

+
+
+

Technology Overview - Architecture

+

Zuul is a distributed system consisting of several components.

+ +
+ +
+

Technology Overview - Implementation

+

Zuul is primarily written in Python v3. The web dashboard is in React/Javascript. The zuul-proxy + service is in C++

+

Zuul depends on Ansible, Zookeeper, Gearman and an RDBMS. (MySQL and PostGreSQL tested)

+

Zuul has code review drivers for Gerrit and GitHub and cloud provider drivers for OpenStack and AWS. Support for more are both underway and welcome.

+

Zuul publishes tagged releases to PyPI as well as container images from master to Dockerhub.

+
+
+

Technology Overview - History

+

Zuul was originally written for the OpenStack project and has been running in production at scale + since 2012.

+

Zuul v3 was released Mar 28, 2018.

+

Since then there have been 12 releases, with the latest, 3.7.0 released Mar 20, 2019.

+

Zuul is released as needed.

+

Zuul does not maintain branches of old code. Zuul is designed and expected to be run CD. The Zuul + project considers this a feature.

+
+
+

Governance

+

Full governance doc can be found at + https://zuul-ci.org/docs/zuul/governance.html

+

The Zuul project is self-governing.

+

Decisions regarding the project are made by the Zuul Maintainers. They are team of people who are + familiar with the project as a whole and act as stewards. They are expected to consider the needs + of the entire community.

+

Changes to code, documentation, website and other project resources are done via code review. In + general, approval of 2 maintainers is sought to approve changes, but depending on circumstances + a greater or fewer number may be appropriate.

+

Other decisions are discussed on the mailing list. Maintainers strive to achieve consensus on these + topics.

+
+
+

Governance - Membership

+

Membership of the Maintainers is decided by consensus of the Maintainers.

+

Existing maintainers are expected to encourage new members.

+

There are no artifical limits on the number of Maintainers. A large group of Maintainers is + important for the health of the project

+

Maintainers are encouraged to become involved in all aspects of the project.

+
+
+

Governance - Project Lead

+

The Maintainers elect a Project Lead to articulate overall direction and promote consistency.

+

The Project Lead does not have any additional rights but does have extra responsibilities.

+

The Project Lead must pay particular attention to the overall design and direction, ensure everyone + is familiar with that design, and facilitate achieving consensus.

+

If the project is unable to reach consensus on an issue, the Project Lead may conduct a poll of + Maintainers. In the case of a tie, the Project Lead's vote will be the tie-breaker.

+

The Project Lead is elected to a one-year term via Condorcet from a set of self-nominated + Maintainers.

+
+
+

Technical best practices

+
    +
  • Documentation +
      +
    • Documentation is maintained in git with Sphinx and managed via code review.
    • +
    • The Zuul website is also maintained in git and managed via code review.
    • +
  • +
  • Code review +
      +
    • Zuul uses the OpenDev Gerrit for all code management.

      +
  • +
  • Testing +
      +
    • All changes are gated by OpenDev Zuul
    • +
  • +
  • Bug handling +
      +
    • Bugs are tracked in OpenDev Storyboard
    • +
  • +
  • Security considerations and vulnerability management +
      +
    • Zuul obeys recognized security and vulnerability management best practices.
    • +
  • +
+
+
+

Open Collaboration

+

Contributions

+

Current Zuul Maintainers are employed by Red Hat, BMW, OSF, SuSE and GoodMoney.

+

All Current Zuul Maintainers have an active role operating a Production Zuul.

+

Policies and practices provide a level playing-field where open collaboration can happen

+

Maintainers are expected to consider the entire community, not just their own individual needs.

+

All Zuul decisions are made collaboratively in community interactions.

+

Issues found in anyone's Production environment are treated as urgent by all.

+
+
+

Four Opens

+

Zuul follows the Four Opens.

+

Additionally, the Zuul community is closely associated with the OpenDev community, which practices + Open Operations. Zuul tags releases after verifying operation at scale in OpenDev.

+

Code of conduct

+

The Zuul Community follows the OpenStack Foundation Code of Coduct

+

Zuul also behaves as a good neighbor to other confirmed and pilot projects within the OpenStack Foundation

+

License

+

Zuul is mostly Apache 2. There are some sections of GPLv3 where code is loaded into Ansible processes. The zuul-proxy subproject is GPLv3.

+
+
+

Active Engagement

+

Zuul has been an active participant at all OpenStack Summits and PTGs since before it was split out from the Infrastructure project.

+

Zuul presentations are given at conferences around the world.

+

Zuul is being used by OpenLab, the Ansible Community, TungstenFabric and many more.

+

Since OpenDev runs Zuul, every OpenStack Foundation project using OpenDev is a collaborator.

+
+ + diff --git a/www/graduation/scripts/slidy.js b/www/graduation/scripts/slidy.js new file mode 100644 index 0000000..2218e3e --- /dev/null +++ b/www/graduation/scripts/slidy.js @@ -0,0 +1,2994 @@ +/* slidy.js + + Copyright (c) 2005-2011 W3C (MIT, ERCIM, Keio), All Rights Reserved. + W3C liability, trademark, document use and software licensing + rules apply, see: + + http://www.w3.org/Consortium/Legal/copyright-documents + http://www.w3.org/Consortium/Legal/copyright-software + + Defines single name "w3c_slidy" in global namespace + Adds event handlers without trampling on any others +*/ + +// the slidy object implementation +var w3c_slidy = { + // classify which kind of browser we're running under + ns_pos: (typeof window.pageYOffset!='undefined'), + khtml: ((navigator.userAgent).indexOf("KHTML") >= 0 ? true : false), + opera: ((navigator.userAgent).indexOf("Opera") >= 0 ? true : false), + ipad: ((navigator.userAgent).indexOf("iPad") >= 0 ? true : false), + iphone: ((navigator.userAgent).indexOf("iPhone") >= 0 ? true : false), + android: ((navigator.userAgent).indexOf("Android") >= 0 ? true : false), + ie: (typeof document.all != "undefined" && !this.opera), + ie6: (!this.ns_pos && navigator.userAgent.indexOf("MSIE 6") != -1), + ie7: (!this.ns_pos && navigator.userAgent.indexOf("MSIE 7") != -1), + ie8: (!this.ns_pos && navigator.userAgent.indexOf("MSIE 8") != -1), + ie9: (!this.ns_pos && navigator.userAgent.indexOf("MSIE 9") != -1), + + // data for swipe and double tap detection on touch screens + last_tap: 0, + prev_tap: 0, + start_x: 0, + start_y: 0, + delta_x: 0, + delta_y: 0, + + // are we running as XHTML? (doesn't work on Opera) + is_xhtml: /xml/.test(document.contentType), + + slide_number: 0, // integer slide count: 0, 1, 2, ... + slide_number_element: null, // element containing slide number + slides: [], // set to array of slide div's + notes: [], // set to array of handout div's + backgrounds: [], // set to array of background div's + toolbar: null, // element containing toolbar + title: null, // document title + last_shown: null, // last incrementally shown item + eos: null, // span element for end of slide indicator + toc: null, // table of contents + outline: null, // outline element with the focus + selected_text_len: 0, // length of drag selection on document + view_all: 0, // 1 to view all slides + handouts + want_toolbar: true, // user preference to show/hide toolbar + mouse_click_enabled: true, // enables left click for next slide + scroll_hack: 0, // IE work around for position: fixed + disable_slide_click: false, // used by clicked anchors + + lang: "en", // updated to language specified by html file + + help_anchor: null, // used for keyboard focus hack in showToolbar() + help_page: "http://www.w3.org/Talks/Tools/Slidy2/help/help.html", + help_text: "Navigate with mouse click, space bar, Cursor Left/Right, " + + "or Pg Up and Pg Dn. Use S and B to change font size.", + + size_index: 0, + size_adjustment: 0, + sizes: new Array("10pt", "12pt", "14pt", "16pt", "18pt", "20pt", + "22pt", "24pt", "26pt", "28pt", "30pt", "32pt"), + + // needed for efficient resizing + last_width: 0, + last_height: 0, + + + // Needed for cross browser support for relative width/height on + // object elements. The work around is to save width/height attributes + // and then to recompute absolute width/height dimensions on resizing + objects: [], + + // attach initialiation event handlers + set_up: function () { + var init = function() { w3c_slidy.init(); }; + if (typeof window.addEventListener != "undefined") + window.addEventListener("load", init, false); + else + window.attachEvent("onload", init); + }, + + hide_slides: function () { + if (document.body && !w3c_slidy.initialized) + document.body.style.visibility = "hidden"; + else + setTimeout(w3c_slidy.hide_slides, 50); + }, + + // hack to persuade IE to compute correct document height + // as needed for simulating fixed positioning of toolbar + ie_hack: function () { + window.resizeBy(0,-1); + window.resizeBy(0, 1); + }, + + init: function () { + //alert("slidy starting test 10"); + document.body.style.visibility = "visible"; + this.init_localization(); + this.add_toolbar(); + this.wrap_implicit_slides(); + this.collect_slides(); + this.collect_notes(); + this.collect_backgrounds(); + this.objects = document.body.getElementsByTagName("object"); + this.patch_anchors(); + this.slide_number = this.find_slide_number(location.href); + window.offscreenbuffering = true; + this.size_adjustment = this.find_size_adjust(); + this.time_left = this.find_duration(); + this.hide_image_toolbar(); // suppress IE image toolbar popup + this.init_outliner(); // activate fold/unfold support + this.title = document.title; + this.keyboardless = (this.ipad||this.iphone||this.android); + + if (this.keyboardless) + { + w3c_slidy.remove_class(w3c_slidy.toolbar, "hidden") + this.want_toolbar = 0; + } + + // work around for opera bug + this.is_xhtml = (document.body.tagName == "BODY" ? false : true); + + if (this.slides.length > 0) + { + var slide = this.slides[this.slide_number]; + + if (this.slide_number > 0) + { + this.set_visibility_all_incremental("visible"); + this.last_shown = this.previous_incremental_item(null); + this.set_eos_status(true); + } + else + { + this.last_shown = null; + this.set_visibility_all_incremental("hidden"); + this.set_eos_status(!this.next_incremental_item(this.last_shown)); + } + + this.set_location(); + this.add_class(this.slides[0], "first-slide"); + w3c_slidy.show_slide(slide); + } + + this.toc = this.table_of_contents(); + + this.add_initial_prompt(); + + // bind event handlers without interfering with custom page scripts + // Tap events behave too weirdly to support clicks reliably on + // iPhone and iPad, so exclude these from click handler + + if (!this.keyboardless) + { + this.add_listener(document.body, "click", this.mouse_button_click); + this.add_listener(document.body, "mousedown", this.mouse_button_down); + } + + this.add_listener(document, "keydown", this.key_down); + this.add_listener(document, "keypress", this.key_press); + this.add_listener(window, "resize", this.resized); + this.add_listener(window, "scroll", this.scrolled); + this.add_listener(window, "unload", this.unloaded); + + this.add_listener(document, "touchstart", this.touchstart); + this.add_listener(document, "touchmove", this.touchmove); + this.add_listener(document, "touchend", this.touchend); + + // this seems to be a debugging hack + //if (!document.body.onclick) + // document.body.onclick = function () { }; + + this.single_slide_view(); + + //this.set_location(); + + this.resized(); + + if (this.ie7) + setTimeout(w3c_slidy.ie_hack, 100); + + this.show_toolbar(); + + // for back button detection + setInterval(function () { w3c_slidy.check_location(); }, 200); + w3c_slidy.initialized = true; + }, + + // create div element with links to each slide + table_of_contents: function () { + var toc = this.create_element("div"); + this.add_class(toc, "slidy_toc hidden"); + //toc.setAttribute("tabindex", "0"); + + var heading = this.create_element("div"); + this.add_class(heading, "toc-heading"); + heading.innerHTML = this.localize("Table of Contents"); + + toc.appendChild(heading); + var previous = null; + + for (var i = 0; i < this.slides.length; ++i) + { + var title = this.has_class(this.slides[i], "title"); + var num = document.createTextNode((i + 1) + ". "); + + toc.appendChild(num); + + var a = this.create_element("a"); + a.setAttribute("href", "#(" + (i+1) + ")"); + + if (title) + this.add_class(a, "titleslide"); + + var name = document.createTextNode(this.slide_name(i)); + a.appendChild(name); + a.onclick = w3c_slidy.toc_click; + a.onkeydown = w3c_slidy.toc_key_down; + a.previous = previous; + + if (previous) + previous.next = a; + + toc.appendChild(a); + + if (i == 0) + toc.first = a; + + if (i < this.slides.length - 1) + { + var br = this.create_element("br"); + toc.appendChild(br); + } + + previous = a; + } + + toc.focus = function () { + if (this.first) + this.first.focus(); + } + + toc.onmouseup = w3c_slidy.mouse_button_up; + + toc.onclick = function (e) { + e||(e=window.event); + + if (w3c_slidy.selected_text_len <= 0) + w3c_slidy.hide_table_of_contents(true); + + w3c_slidy.stop_propagation(e); + + if (e.cancel != undefined) + e.cancel = true; + + if (e.returnValue != undefined) + e.returnValue = false; + + return false; + }; + + document.body.insertBefore(toc, document.body.firstChild); + return toc; + }, + + is_shown_toc: function () { + return !w3c_slidy.has_class(w3c_slidy.toc, "hidden"); + }, + + show_table_of_contents: function () { + w3c_slidy.remove_class(w3c_slidy.toc, "hidden"); + var toc = w3c_slidy.toc; + toc.focus(); + + if (w3c_slidy.ie7 && w3c_slidy.slide_number == 0) + setTimeout(w3c_slidy.ie_hack, 100); + }, + + hide_table_of_contents: function (focus) { + w3c_slidy.add_class(w3c_slidy.toc, "hidden"); + + if (focus && !w3c_slidy.opera && + !w3c_slidy.has_class(w3c_slidy.toc, "hidden")) + w3c_slidy.help_anchor.focus(); + }, + + toggle_table_of_contents: function () { + if (w3c_slidy.is_shown_toc()) + w3c_slidy.hide_table_of_contents(true); + else + w3c_slidy.show_table_of_contents(); + }, + + // called on clicking toc entry + toc_click: function (e) { + if (!e) + e = window.event; + + var target = w3c_slidy.get_target(e); + + if (target && target.nodeType == 1) + { + var uri = target.getAttribute("href"); + + if (uri) + { + //alert("going to " + uri); + var slide = w3c_slidy.slides[w3c_slidy.slide_number]; + w3c_slidy.hide_slide(slide); + w3c_slidy.slide_number = w3c_slidy.find_slide_number(uri); + slide = w3c_slidy.slides[w3c_slidy.slide_number]; + w3c_slidy.last_shown = null; + w3c_slidy.set_location(); + w3c_slidy.set_visibility_all_incremental("hidden"); + w3c_slidy.set_eos_status(!w3c_slidy.next_incremental_item(w3c_slidy.last_shown)); + w3c_slidy.show_slide(slide); + //target.focus(); + + try + { + if (!w3c_slidy.opera) + w3c_slidy.help_anchor.focus(); + } + catch (e) + { + } + } + } + + w3c_slidy.hide_table_of_contents(true); + if (w3c_slidy.ie7) w3c_slidy.ie_hack(); + w3c_slidy.stop_propagation(e); + return w3c_slidy.cancel(e); + }, + + // called onkeydown for toc entry + toc_key_down: function (event) { + var key; + + if (!event) + var event = window.event; + + // kludge around NS/IE differences + if (window.event) + key = window.event.keyCode; + else if (event.which) + key = event.which; + else + return true; // Yikes! unknown browser + + // ignore event if key value is zero + // as for alt on Opera and Konqueror + if (!key) + return true; + + // check for concurrent control/command/alt key + // but are these only present on mouse events? + + if (event.ctrlKey || event.altKey) + return true; + + if (key == 13) + { + var uri = this.getAttribute("href"); + + if (uri) + { + //alert("going to " + uri); + var slide = w3c_slidy.slides[w3c_slidy.slide_number]; + w3c_slidy.hide_slide(slide); + w3c_slidy.slide_number = w3c_slidy.find_slide_number(uri); + slide = w3c_slidy.slides[w3c_slidy.slide_number]; + w3c_slidy.last_shown = null; + w3c_slidy.set_location(); + w3c_slidy.set_visibility_all_incremental("hidden"); + w3c_slidy.set_eos_status(!w3c_slidy.next_incremental_item(w3c_slidy.last_shown)); + w3c_slidy.show_slide(slide); + //target.focus(); + + try + { + if (!w3c_slidy.opera) + w3c_slidy.help_anchor.focus(); + } + catch (e) + { + } + } + + w3c_slidy.hide_table_of_contents(true); + + if (self.ie7) + w3c_slidy.ie_hack(); + + return w3c_slidy.cancel(event); + } + + if (key == 40 && this.next) + { + this.next.focus(); + return w3c_slidy.cancel(event); + } + + if (key == 38 && this.previous) + { + this.previous.focus(); + return w3c_slidy.cancel(event); + } + + return true; + }, + + touchstart: function (e) + { + //e.preventDefault(); + this.prev_tap = this.last_tap; + this.last_tap = (new Date).getTime(); + + var tap_delay = this.last_tap - this.prev_tap; + + if (tap_delay <= 200) + { + // double tap + } + + var touch = e.touches[0]; + + this.start_x = touch.pageX; + this.start_y = touch.pageY; + this.delta_x = this.delta_y = 0; + }, + + touchmove: function (e) + { + //e.preventDefault(); + var touch = e.touches[0]; + this.delta_x = touch.pageX - this.start_x; + this.delta_y = touch.pageY - this.start_y; + }, + + touchend: function (e) + { + //e.preventDefault(); + var delay = (new Date).getTime() - this.last_tap; + var dx = this.delta_x; + var dy = this.delta_y; + var abs_dx = Math.abs(dx); + var abs_dy = Math.abs(dy); + + if (delay < 500 && (abs_dx > 100 || abs_dy > 100)) + { + if (abs_dx > 0.5 * abs_dy) + { + if (dx < 0) + w3c_slidy.next_slide(true); + else + w3c_slidy.previous_slide(true); + } + else if (abs_dy > 2 * abs_dx) + { + w3c_slidy.toggle_table_of_contents(); + } + } + }, + + // ### OBSOLETE ### + before_print: function () { + this.show_all_slides(); + this.hide_toolbar(); + alert("before print"); + }, + + // ### OBSOLETE ### + after_print: function () { + if (!this.view_all) + { + this.single_slide_view(); + this.show_toolbar(); + } + alert("after print"); + }, + + // ### OBSOLETE ### + print_slides: function () { + this.before_print(); + window.print(); + this.after_print(); + }, + + // ### OBSOLETE ?? ### + toggle_view: function () { + if (this.view_all) + { + this.single_slide_view(); + this.show_toolbar(); + this.view_all = 0; + } + else + { + this.show_all_slides(); + this.hide_toolbar(); + this.view_all = 1; + } + }, + + // prepare for printing ### OBSOLETE ### + show_all_slides: function () { + this.remove_class(document.body, "single_slide"); + this.set_visibility_all_incremental("visible"); + }, + + // restore after printing ### OBSOLETE ### + single_slide_view: function () { + this.add_class(document.body, "single_slide"); + this.set_visibility_all_incremental("visible"); + this.last_shown = this.previous_incremental_item(null); + }, + + // suppress IE's image toolbar pop up + hide_image_toolbar: function () { + if (!this.ns_pos) + { + var images = document.getElementsByTagName("IMG"); + + for (var i = 0; i < images.length; ++i) + images[i].setAttribute("galleryimg", "no"); + } + }, + + unloaded: function (e) { + //alert("unloaded"); + }, + + // Safari and Konqueror don't yet support getComputedStyle() + // and they always reload page when location.href is updated + is_KHTML: function () { + var agent = navigator.userAgent; + return (agent.indexOf("KHTML") >= 0 ? true : false); + }, + + // find slide name from first h1 element + // default to document title + slide number + slide_name: function (index) { + var name = null; + var slide = this.slides[index]; + + var heading = this.find_heading(slide); + + if (heading) + name = this.extract_text(heading); + + if (!name) + name = this.title + "(" + (index + 1) + ")"; + + name.replace(/\&/g, "&"); + name.replace(/\/g, ">"); + + return name; + }, + + // find first h1 element in DOM tree + find_heading: function (node) { + if (!node || node.nodeType != 1) + return null; + + if (node.nodeName == "H1" || node.nodeName == "h1") + return node; + + var child = node.firstChild; + + while (child) + { + node = this.find_heading(child); + + if (node) + return node; + + child = child.nextSibling; + } + + return null; + }, + + // recursively extract text from DOM tree + extract_text: function (node) { + if (!node) + return ""; + + // text nodes + if (node.nodeType == 3) + return node.nodeValue; + + // elements + if (node.nodeType == 1) + { + node = node.firstChild; + var text = ""; + + while (node) + { + text = text + this.extract_text(node); + node = node.nextSibling; + } + + return text; + } + + return ""; + }, + + // find copyright text from meta element + find_copyright: function () { + var name, content; + var meta = document.getElementsByTagName("meta"); + + for (var i = 0; i < meta.length; ++i) + { + name = meta[i].getAttribute("name"); + content = meta[i].getAttribute("content"); + + if (name == "copyright") + return content; + } + + return null; + }, + + find_size_adjust: function () { + var name, content, offset; + var meta = document.getElementsByTagName("meta"); + + for (var i = 0; i < meta.length; ++i) + { + name = meta[i].getAttribute("name"); + content = meta[i].getAttribute("content"); + + if (name == "font-size-adjustment") + return 1 * content; + } + + return 1; + }, + + // for 20 minutes + find_duration: function () { + var name, content, offset; + var meta = document.getElementsByTagName("meta"); + + for (var i = 0; i < meta.length; ++i) + { + name = meta[i].getAttribute("name"); + content = meta[i].getAttribute("content"); + + if (name == "duration") + return 60000 * content; + } + + return null; + }, + + replace_by_non_breaking_space: function (str) { + for (var i = 0; i < str.length; ++i) + str[i] = 160; + }, + + // ### CHECK ME ### is use of "li" okay for text/html? + // for XHTML do we also need to specify namespace? + init_outliner: function () { + var items = document.getElementsByTagName("li"); + + for (var i = 0; i < items.length; ++i) + { + var target = items[i]; + + if (!this.has_class(target.parentNode, "outline")) + continue; + + target.onclick = this.outline_click; +/* ### more work needed for IE6 + if (!this.ns_pos) + { + target.onmouseover = this.hover_outline; + target.onmouseout = this.unhover_outline; + } +*/ + if (this.foldable(target)) + { + target.foldable = true; + target.onfocus = function () {w3c_slidy.outline = this;}; + target.onblur = function () {w3c_slidy.outline = null;}; + + if (!target.getAttribute("tabindex")) + target.setAttribute("tabindex", "0"); + + if (this.has_class(target, "expand")) + this.unfold(target); + else + this.fold(target); + } + else + { + this.add_class(target, "nofold"); + target.visible = true; + target.foldable = false; + } + } + }, + + foldable: function (item) { + if (!item || item.nodeType != 1) + return false; + + var node = item.firstChild; + + while (node) + { + if (node.nodeType == 1 && this.is_block(node)) + return true; + + node = node.nextSibling; + } + + return false; + }, + + // ### CHECK ME ### switch to add/remove "hidden" class + fold: function (item) { + if (item) + { + this.remove_class(item, "unfolded"); + this.add_class(item, "folded"); + } + + var node = item ? item.firstChild : null; + + while (node) + { + if (node.nodeType == 1 && this.is_block(node)) // element + { + w3c_slidy.add_class(node, "hidden"); + } + + node = node.nextSibling; + } + + item.visible = false; + }, + + // ### CHECK ME ### switch to add/remove "hidden" class + unfold: function (item) { + if (item) + { + this.add_class(item, "unfolded"); + this.remove_class(item, "folded"); + } + + var node = item ? item.firstChild : null; + + while (node) + { + if (node.nodeType == 1 && this.is_block(node)) // element + { + w3c_slidy.remove_class(node, "hidden"); + } + + node = node.nextSibling; + } + + item.visible = true; + }, + + outline_click: function (e) { + if (!e) + e = window.event; + + var rightclick = false; + var target = w3c_slidy.get_target(e); + + while (target && target.visible == undefined) + target = target.parentNode; + + if (!target) + return true; + + if (e.which) + rightclick = (e.which == 3); + else if (e.button) + rightclick = (e.button == 2); + + if (!rightclick && target.visible != undefined) + { + if (target.foldable) + { + if (target.visible) + w3c_slidy.fold(target); + else + w3c_slidy.unfold(target); + } + + w3c_slidy.stop_propagation(e); + e.cancel = true; + e.returnValue = false; + } + + return false; + }, + + add_initial_prompt: function () { + var prompt = this.create_element("div"); + prompt.setAttribute("class", "initial_prompt"); + + var p1 = this.create_element("p"); + prompt.appendChild(p1); + p1.setAttribute("class", "help"); + + if (this.keyboardless) + p1.innerHTML = "swipe left to move to next slide"; + else + p1.innerHTML = "Space, Right Arrow or swipe left to move to " + + "next slide, click help below for more details"; + + this.add_listener(prompt, "click", function (e) { + document.body.removeChild(prompt); + w3c_slidy.stop_propagation(e); + + if (e.cancel != undefined) + e.cancel = true; + + if (e.returnValue != undefined) + e.returnValue = false; + + return false; + }); + + document.body.appendChild(prompt); + this.initial_prompt = prompt; + setTimeout(function() {document.body.removeChild(prompt);}, 5000); + }, + + add_toolbar: function () { + var counter, page; + + this.toolbar = this.create_element("div"); + this.toolbar.setAttribute("class", "toolbar"); + + // a reasonably behaved browser + if (this.ns_pos || !this.ie6) + { + var right = this.create_element("div"); + right.setAttribute("style", "float: right; text-align: right"); + + counter = this.create_element("span") + counter.innerHTML = this.localize("slide") + " n/m"; + right.appendChild(counter); + this.toolbar.appendChild(right); + + var left = this.create_element("div"); + left.setAttribute("style", "text-align: left"); + + // global end of slide indicator + this.eos = this.create_element("span"); + this.eos.innerHTML = "* "; + left.appendChild(this.eos); + + var help = this.create_element("a"); + help.setAttribute("href", this.help_page); + help.setAttribute("title", this.localize(this.help_text)); + help.innerHTML = this.localize("help?"); + left.appendChild(help); + this.help_anchor = help; // save for focus hack + + var gap1 = document.createTextNode(" "); + left.appendChild(gap1); + + var contents = this.create_element("a"); + contents.setAttribute("href", "javascript:w3c_slidy.toggle_table_of_contents()"); + contents.setAttribute("title", this.localize("table of contents")); + contents.innerHTML = this.localize("contents?"); + left.appendChild(contents); + + var gap2 = document.createTextNode(" "); + left.appendChild(gap2); + + var copyright = this.find_copyright(); + + if (copyright) + { + var span = this.create_element("span"); + span.className = "copyright"; + span.innerHTML = copyright; + left.appendChild(span); + } + + this.toolbar.setAttribute("tabindex", "0"); + this.toolbar.appendChild(left); + } + else // IE6 so need to work around its poor CSS support + { + this.toolbar.style.position = (this.ie7 ? "fixed" : "absolute"); + this.toolbar.style.zIndex = "200"; + this.toolbar.style.width = "99.9%"; + this.toolbar.style.height = "1.2em"; + this.toolbar.style.top = "auto"; + this.toolbar.style.bottom = "0"; + this.toolbar.style.left = "0"; + this.toolbar.style.right = "0"; + this.toolbar.style.textAlign = "left"; + this.toolbar.style.fontSize = "60%"; + this.toolbar.style.color = "red"; + this.toolbar.borderWidth = 0; + this.toolbar.className = "toolbar"; + this.toolbar.style.background = "rgb(240,240,240)"; + + // would like to have help text left aligned + // and page counter right aligned, floating + // div's don't work, so instead use nested + // absolutely positioned div's. + + var sp = this.create_element("span"); + sp.innerHTML = "  * "; + this.toolbar.appendChild(sp); + this.eos = sp; // end of slide indicator + + var help = this.create_element("a"); + help.setAttribute("href", this.help_page); + help.setAttribute("title", this.localize(this.help_text)); + help.innerHTML = this.localize("help?"); + this.toolbar.appendChild(help); + this.help_anchor = help; // save for focus hack + + var gap1 = document.createTextNode(" "); + this.toolbar.appendChild(gap1); + + var contents = this.create_element("a"); + contents.setAttribute("href", "javascript:toggleTableOfContents()"); + contents.setAttribute("title", this.localize("table of contents".localize)); + contents.innerHTML = this.localize("contents?"); + this.toolbar.appendChild(contents); + + var gap2 = document.createTextNode(" "); + this.toolbar.appendChild(gap2); + + var copyright = this.find_copyright(); + + if (copyright) + { + var span = this.create_element("span"); + span.innerHTML = copyright; + span.style.color = "black"; + span.style.marginLeft = "0.5em"; + this.toolbar.appendChild(span); + } + + counter = this.create_element("div") + counter.style.position = "absolute"; + counter.style.width = "auto"; //"20%"; + counter.style.height = "1.2em"; + counter.style.top = "auto"; + counter.style.bottom = 0; + counter.style.right = "0"; + counter.style.textAlign = "right"; + counter.style.color = "red"; + counter.style.background = "rgb(240,240,240)"; + + counter.innerHTML = this.localize("slide") + " n/m"; + this.toolbar.appendChild(counter); + } + + // ensure that click isn't passed through to the page + this.toolbar.onclick = + function (e) { + if (!e) + e = window.event; + + var target = e.target; + + if (!target && e.srcElement) + target = e.srcElement; + + // work around Safari bug + if (target && target.nodeType == 3) + target = target.parentNode; + + w3c_slidy.stop_propagation(e); + + if (target && target.nodeName.toLowerCase() != "a") + w3c_slidy.mouse_button_click(e); + }; + + this.slide_number_element = counter; + this.set_eos_status(false); + document.body.appendChild(this.toolbar); + }, + + // wysiwyg editors make it hard to use div elements + // e.g. amaya loses the div when you copy and paste + // this function wraps div elements around implicit + // slides which start with an h1 element and continue + // up to the next heading or div element + wrap_implicit_slides: function () { + var i, heading, node, next, div; + var headings = document.getElementsByTagName("h1"); + + if (!headings) + return; + + for (i = 0; i < headings.length; ++i) + { + heading = headings[i]; + + if (heading.parentNode != document.body) + continue; + + node = heading.nextSibling; + + div = document.createElement("div"); + this.add_class(div, "slide"); + document.body.replaceChild(div, heading); + div.appendChild(heading); + + while (node) + { + if (node.nodeType == 1) // an element + { + if (node.nodeName == "H1" || node.nodeName == "h1") + break; + + if (node.nodeName == "DIV" || node.nodeName == "div") + { + if (this.has_class(node, "slide")) + break; + + if (this.has_class(node, "handout")) + break; + } + } + + next = node.nextSibling; + node = document.body.removeChild(node); + div.appendChild(node); + node = next; + } + } + }, + +// return new array of all slides + collect_slides: function () { + var slides = new Array(); + var divs = document.body.getElementsByTagName("div"); + + for (var i = 0; i < divs.length; ++i) + { + div = divs.item(i); + + if (this.has_class(div, "slide")) + { + // add slide to collection + slides[slides.length] = div; + + // hide each slide as it is found + this.add_class(div, "hidden"); + + // add dummy
at end for scrolling hack + var node1 = document.createElement("br"); + div.appendChild(node1); + var node2 = document.createElement("br"); + div.appendChild(node2); + } + else if (this.has_class(div, "background")) + { // work around for Firefox SVG reload bug + // which otherwise replaces 1st SVG graphic with 2nd + div.style.display = "block"; + } + } + + this.slides = slides; + }, + + // return new array of all
+ collect_notes: function () { + var notes = new Array(); + var divs = document.body.getElementsByTagName("div"); + + for (var i = 0; i < divs.length; ++i) + { + div = divs.item(i); + + if (this.has_class(div, "handout")) + { + // add note to collection + notes[notes.length] = div; + + // and hide it + this.add_class(div, "hidden"); + } + } + + this.notes = notes; + }, + + // return new array of all
+ // including named backgrounds e.g. class="background titlepage" + collect_backgrounds: function () { + var backgrounds = new Array(); + var divs = document.body.getElementsByTagName("div"); + + for (var i = 0; i < divs.length; ++i) + { + div = divs.item(i); + + if (this.has_class(div, "background")) + { + // add background to collection + backgrounds[backgrounds.length] = div; + + // and hide it + this.add_class(div, "hidden"); + } + } + + this.backgrounds = backgrounds; + }, + + // set click handlers on all anchors + patch_anchors: function () { + var self = w3c_slidy; + var handler = function (event) { + // compare this.href with location.href + // for link to another slide in this doc + + if (self.page_address(this.href) == self.page_address(location.href)) + { + // yes, so find new slide number + var newslidenum = self.find_slide_number(this.href); + + if (newslidenum != self.slide_number) + { + var slide = self.slides[self.slide_number]; + self.hide_slide(slide); + self.slide_number = newslidenum; + slide = self.slides[self.slide_number]; + self.show_slide(slide); + self.set_location(); + } + } + else + w3c_slidy.stop_propagation(event); + +// else if (this.target == null) +// location.href = this.href; + + this.blur(); + self.disable_slide_click = true; + }; + + var anchors = document.body.getElementsByTagName("a"); + + for (var i = 0; i < anchors.length; ++i) + { + if (window.addEventListener) + anchors[i].addEventListener("click", handler, false); + else + anchors[i].attachEvent("onclick", handler); + } + }, + + // ### CHECK ME ### see which functions are invoked via setTimeout + // either directly or indirectly for use of w3c_slidy vs this + show_slide_number: function () { + var timer = w3c_slidy.get_timer(); + w3c_slidy.slide_number_element.innerHTML = timer + w3c_slidy.localize("slide") + " " + + (w3c_slidy.slide_number + 1) + "/" + w3c_slidy.slides.length; + }, + + // every 200mS check if the location has been changed as a + // result of the user activating the Back button/menu item + // doesn't work for Opera < 9.5 + check_location: function () { + var hash = location.hash; + + if (w3c_slidy.slide_number > 0 && (hash == "" || hash == "#")) + w3c_slidy.goto_slide(0); + else if (hash.length > 2 && hash != "#("+(w3c_slidy.slide_number+1)+")") + { + var num = parseInt(location.hash.substr(2)); + + if (!isNaN(num)) + w3c_slidy.goto_slide(num-1); + } + + if (w3c_slidy.time_left && w3c_slidy.slide_number > 0) + { + w3c_slidy.show_slide_number(); + + if (w3c_slidy.time_left > 0) + w3c_slidy.time_left -= 200; + } + }, + + get_timer: function () { + var timer = ""; + if (w3c_slidy.time_left) + { + var mins, secs; + secs = Math.floor(w3c_slidy.time_left/1000); + mins = Math.floor(secs / 60); + secs = secs % 60; + timer = (mins ? mins+"m" : "") + secs + "s "; + } + + return timer; + }, + + // this doesn't push location onto history stack for IE + // for which a hidden iframe hack is needed: load page into + // the iframe with script that set's parent's location.hash + // but that won't work for standalone use unless we can + // create the page dynamically via a javascript: URL + // ### use history.pushState if available + set_location: function () { + var uri = w3c_slidy.page_address(location.href); + var hash = "#(" + (w3c_slidy.slide_number+1) + ")"; + + if (w3c_slidy.slide_number >= 0) + uri = uri + hash; + + if (typeof(history.pushState) != "undefined") + { + document.title = w3c_slidy.title + " (" + (w3c_slidy.slide_number+1) + ")"; + history.pushState(0, document.title, hash); + w3c_slidy.show_slide_number(); + return; + } + + if (w3c_slidy.ie && (w3c_slidy.ie6 || w3c_slidy.ie7)) + w3c_slidy.push_hash(hash); + + if (uri != location.href) // && !khtml + location.href = uri; + + if (this.khtml) + hash = "(" + (w3c_slidy.slide_number+1) + ")"; + + if (!this.ie && location.hash != hash && location.hash != "") + location.hash = hash; + + document.title = w3c_slidy.title + " (" + (w3c_slidy.slide_number+1) + ")"; + w3c_slidy.show_slide_number(); + }, + + page_address: function (uri) { + var i = uri.indexOf("#"); + + if (i < 0) + i = uri.indexOf("%23"); + + // check if anchor is entire page + + if (i < 0) + return uri; // yes + + return uri.substr(0, i); + }, + + // only used for IE6 and IE7 + on_frame_loaded: function (hash) { + location.hash = hash; + var uri = w3c_slidy.page_address(location.href); + location.href = uri + hash; + }, + + // history hack with thanks to Bertrand Le Roy + push_hash: function (hash) { + if (hash == "") hash = "#(1)"; + window.location.hash = hash; + + var doc = document.getElementById("historyFrame").contentWindow.document; + doc.open("javascript:''"); + doc.write("hello mum"); + doc.close(); + }, + + // find current slide based upon location + // first find target anchor and then look + // for associated div element enclosing it + // finally map that to slide number + find_slide_number: function (uri) { + // first get anchor from page location + + var i = uri.indexOf("#"); + + // check if anchor is entire page + if (i < 0) + return 0; // yes + + var anchor = unescape(uri.substr(i+1)); + + // now use anchor as XML ID to find target + var target = document.getElementById(anchor); + + if (!target) + { + // does anchor look like "(2)" for slide 2 ?? + // where first slide is (1) + var re = /\((\d)+\)/; + + if (anchor.match(re)) + { + var num = parseInt(anchor.substring(1, anchor.length-1)); + + if (num > this.slides.length) + num = 1; + + if (--num < 0) + num = 0; + + return num; + } + + // accept [2] for backwards compatibility + re = /\[(\d)+\]/; + + if (anchor.match(re)) + { + var num = parseInt(anchor.substring(1, anchor.length-1)); + + if (num > this.slides.length) + num = 1; + + if (--num < 0) + num = 0; + + return num; + } + + // oh dear unknown anchor + return 0; + } + + // search for enclosing slide + + while (true) + { + // browser coerces html elements to uppercase! + if (target.nodeName.toLowerCase() == "div" && + this.has_class(target, "slide")) + { + // found the slide element + break; + } + + // otherwise try parent element if any + + target = target.parentNode; + + if (!target) + { + return 0; // no luck! + } + }; + + for (i = 0; i < slides.length; ++i) + { + if (slides[i] == target) + return i; // success + } + + // oh dear still no luck + return 0; + }, + + previous_slide: function (incremental) { + if (!w3c_slidy.view_all) + { + var slide; + + if ((incremental || w3c_slidy.slide_number == 0) && w3c_slidy.last_shown != null) + { + w3c_slidy.last_shown = w3c_slidy.hide_previous_item(w3c_slidy.last_shown); + w3c_slidy.set_eos_status(false); + } + else if (w3c_slidy.slide_number > 0) + { + slide = w3c_slidy.slides[w3c_slidy.slide_number]; + w3c_slidy.hide_slide(slide); + + w3c_slidy.slide_number = w3c_slidy.slide_number - 1; + slide = w3c_slidy.slides[w3c_slidy.slide_number]; + w3c_slidy.set_visibility_all_incremental("visible"); + w3c_slidy.last_shown = w3c_slidy.previous_incremental_item(null); + w3c_slidy.set_eos_status(true); + w3c_slidy.show_slide(slide); + } + + w3c_slidy.set_location(); + + if (!w3c_slidy.ns_pos) + w3c_slidy.refresh_toolbar(200); + } + }, + + next_slide: function (incremental) { + if (!w3c_slidy.view_all) + { + var slide, last = w3c_slidy.last_shown; + + if (incremental || w3c_slidy.slide_number == w3c_slidy.slides.length - 1) + w3c_slidy.last_shown = w3c_slidy.reveal_next_item(w3c_slidy.last_shown); + + if ((!incremental || w3c_slidy.last_shown == null) && + w3c_slidy.slide_number < w3c_slidy.slides.length - 1) + { + slide = w3c_slidy.slides[w3c_slidy.slide_number]; + w3c_slidy.hide_slide(slide); + + w3c_slidy.slide_number = w3c_slidy.slide_number + 1; + slide = w3c_slidy.slides[w3c_slidy.slide_number]; + w3c_slidy.last_shown = null; + w3c_slidy.set_visibility_all_incremental("hidden"); + w3c_slidy.show_slide(slide); + } + else if (!w3c_slidy.last_shown) + { + if (last && incremental) + w3c_slidy.last_shown = last; + } + + w3c_slidy.set_location(); + + w3c_slidy.set_eos_status(!w3c_slidy.next_incremental_item(w3c_slidy.last_shown)); + + if (!w3c_slidy.ns_pos) + w3c_slidy.refresh_toolbar(200); + } + }, + + // to first slide with nothing revealed + // i.e. state at start of presentation + first_slide: function () { + if (!w3c_slidy.view_all) + { + var slide; + + if (w3c_slidy.slide_number != 0) + { + slide = w3c_slidy.slides[w3c_slidy.slide_number]; + w3c_slidy.hide_slide(slide); + + w3c_slidy.slide_number = 0; + slide = w3c_slidy.slides[w3c_slidy.slide_number]; + w3c_slidy.last_shown = null; + w3c_slidy.set_visibility_all_incremental("hidden"); + w3c_slidy.show_slide(slide); + } + + w3c_slidy.set_eos_status( + !w3c_slidy.next_incremental_item(w3c_slidy.last_shown)); + w3c_slidy.set_location(); + } + }, + + // goto last slide with everything revealed + // i.e. state at end of presentation + last_slide: function () { + if (!w3c_slidy.view_all) + { + var slide; + + w3c_slidy.last_shown = null; //revealNextItem(lastShown); + + if (w3c_slidy.last_shown == null && + w3c_slidy.slide_number < w3c_slidy.slides.length - 1) + { + slide = w3c_slidy.slides[w3c_slidy.slide_number]; + w3c_slidy.hide_slide(slide); + w3c_slidy.slide_number = w3c_slidy.slides.length - 1; + slide = w3c_slidy.slides[w3c_slidy.slide_number]; + w3c_slidy.set_visibility_all_incremental("visible"); + w3c_slidy.last_shown = w3c_slidy.previous_incremental_item(null); + + w3c_slidy.show_slide(slide); + } + else + { + w3c_slidy.set_visibility_all_incremental("visible"); + w3c_slidy.last_shown = w3c_slidy.previous_incremental_item(null); + } + + w3c_slidy.set_eos_status(true); + w3c_slidy.set_location(); + } + }, + + + // ### check this and consider add/remove class + set_eos_status: function (state) { + if (this.eos) + this.eos.style.color = (state ? "rgb(240,240,240)" : "red"); + }, + + // first slide is 0 + goto_slide: function (num) { + //alert("going to slide " + (num+1)); + var slide = w3c_slidy.slides[w3c_slidy.slide_number]; + w3c_slidy.hide_slide(slide); + w3c_slidy.slide_number = num; + slide = w3c_slidy.slides[w3c_slidy.slide_number]; + w3c_slidy.last_shown = null; + w3c_slidy.set_visibility_all_incremental("hidden"); + w3c_slidy.set_eos_status(!w3c_slidy.next_incremental_item(w3c_slidy.last_shown)); + document.title = w3c_slidy.title + " (" + (w3c_slidy.slide_number+1) + ")"; + w3c_slidy.show_slide(slide); + w3c_slidy.show_slide_number(); + }, + + + show_slide: function (slide) { + this.sync_background(slide); + window.scrollTo(0,0); + this.remove_class(slide, "hidden"); + }, + + hide_slide: function (slide) { + this.add_class(slide, "hidden"); + }, + + // show just the backgrounds pertinent to this slide + // when slide background-color is transparent + // this should now work with rgba color values + sync_background: function (slide) { + var background; + var bgColor; + + if (slide.currentStyle) + bgColor = slide.currentStyle["backgroundColor"]; + else if (document.defaultView) + { + var styles = document.defaultView.getComputedStyle(slide,null); + + if (styles) + bgColor = styles.getPropertyValue("background-color"); + else // broken implementation probably due Safari or Konqueror + { + //alert("defective implementation of getComputedStyle()"); + bgColor = "transparent"; + } + } + else + bgColor == "transparent"; + + if (bgColor == "transparent" || + bgColor.indexOf("rgba") >= 0 || + bgColor.indexOf("opacity") >= 0) + { + var slideClass = this.get_class_list(slide); + + for (var i = 0; i < this.backgrounds.length; i++) + { + background = this.backgrounds[i]; + + var bgClass = this.get_class_list(background); + + if (this.matching_background(slideClass, bgClass)) + this.remove_class(background, "hidden"); + else + this.add_class(background, "hidden"); + } + } + else // forcibly hide all backgrounds + this.hide_backgrounds(); + }, + + hide_backgrounds: function () { + for (var i = 0; i < this.backgrounds.length; i++) + { + background = this.backgrounds[i]; + this.add_class(background, "hidden"); + } + }, + + // compare classes for slide and background + matching_background: function (slideClass, bgClass) { + var i, count, pattern, result; + + // define pattern as regular expression + pattern = /\w+/g; + + // check background class names + result = bgClass.match(pattern); + + for (i = count = 0; i < result.length; i++) + { + if (result[i] == "hidden") + continue; + + if (result[i] == "background") + continue; + + ++count; + } + + if (count == 0) // default match + return true; + + // check for matches and place result in array + result = slideClass.match(pattern); + + // now check if desired name is present for background + for (i = count = 0; i < result.length; i++) + { + if (result[i] == "hidden") + continue; + + if (this.has_token(bgClass, result[i])) + return true; + } + + return false; + }, + + resized: function () { + var width = 0; + + if ( typeof( window.innerWidth ) == 'number' ) + width = window.innerWidth; // Non IE browser + else if (document.documentElement && document.documentElement.clientWidth) + width = document.documentElement.clientWidth; // IE6 + else if (document.body && document.body.clientWidth) + width = document.body.clientWidth; // IE4 + + var height = 0; + + if ( typeof( window.innerHeight ) == 'number' ) + height = window.innerHeight; // Non IE browser + else if (document.documentElement && document.documentElement.clientHeight) + height = document.documentElement.clientHeight; // IE6 + else if (document.body && document.body.clientHeight) + height = document.body.clientHeight; // IE4 + + if (height && (width/height > 1.05*1024/768)) + { + width = height * 1024.0/768; + } + + // IE fires onresize even when only font size is changed! + // so we do a check to avoid blocking < and > actions + if (width != w3c_slidy.last_width || height != w3c_slidy.last_height) + { + if (width >= 1100) + w3c_slidy.size_index = 5; // 4 + else if (width >= 1000) + w3c_slidy.size_index = 4; // 3 + else if (width >= 800) + w3c_slidy.size_index = 3; // 2 + else if (width >= 600) + w3c_slidy.size_index = 2; // 1 + else if (width) + w3c_slidy.size_index = 0; + + // add in font size adjustment from meta element e.g. + // + // useful when slides have too much content ;-) + + if (0 <= w3c_slidy.size_index + w3c_slidy.size_adjustment && + w3c_slidy.size_index + w3c_slidy.size_adjustment < w3c_slidy.sizes.length) + w3c_slidy.size_index = w3c_slidy.size_index + w3c_slidy.size_adjustment; + + // enables cross browser use of relative width/height + // on object elements for use with SVG and Flash media + w3c_slidy.adjust_object_dimensions(width, height); + + if (document.body.style.fontSize != w3c_slidy.sizes[w3c_slidy.size_index]) + { + document.body.style.fontSize = w3c_slidy.sizes[w3c_slidy.size_index]; + } + + w3c_slidy.last_width = width; + w3c_slidy.last_height = height; + + // force reflow to work around Mozilla bug + if (w3c_slidy.ns_pos) + { + var slide = w3c_slidy.slides[w3c_slidy.slide_number]; + w3c_slidy.hide_slide(slide); + w3c_slidy.show_slide(slide); + } + + // force correct positioning of toolbar + w3c_slidy.refresh_toolbar(200); + } + }, + + scrolled: function () { + if (w3c_slidy.toolbar && !w3c_slidy.ns_pos && !w3c_slidy.ie7) + { + w3c_slidy.hack_offset = w3c_slidy.scroll_x_offset(); + // hide toolbar + w3c_slidy.toolbar.style.display = "none"; + + // make it reappear later + if (w3c_slidy.scrollhack == 0 && !w3c_slidy.view_all) + { + setTimeout(function () {w3c_slidy.show_toolbar(); }, 1000); + w3c_slidy.scrollhack = 1; + } + } + }, + + hide_toolbar: function () { + w3c_slidy.add_class(w3c_slidy.toolbar, "hidden"); + window.focus(); + }, + + // used to ensure IE refreshes toolbar in correct position + refresh_toolbar: function (interval) { + if (!w3c_slidy.ns_pos && !w3c_slidy.ie7) + { + w3c_slidy.hide_toolbar(); + setTimeout(function () {w3c_slidy.show_toolbar();}, interval); + } + }, + + // restores toolbar after short delay + show_toolbar: function () { + if (w3c_slidy.want_toolbar) + { + w3c_slidy.toolbar.style.display = "block"; + + if (!w3c_slidy.ns_pos) + { + // adjust position to allow for scrolling + var xoffset = w3c_slidy.scroll_x_offset(); + w3c_slidy.toolbar.style.left = xoffset; + w3c_slidy.toolbar.style.right = xoffset; + + // determine vertical scroll offset + //var yoffset = scrollYOffset(); + + // bottom is doc height - window height - scroll offset + //var bottom = documentHeight() - lastHeight - yoffset + + //if (yoffset > 0 || documentHeight() > lastHeight) + // bottom += 16; // allow for height of scrollbar + + w3c_slidy.toolbar.style.bottom = 0; //bottom; + } + + w3c_slidy.remove_class(w3c_slidy.toolbar, "hidden"); + } + + w3c_slidy.scrollhack = 0; + + + // set the keyboard focus to the help link on the + // toolbar to ensure that document has the focus + // IE doesn't always work with window.focus() + // and this hack has benefit of Enter for help + + try + { + if (!w3c_slidy.opera) + w3c_slidy.help_anchor.focus(); + } + catch (e) + { + } + }, + +// invoked via F key + toggle_toolbar: function () { + if (!w3c_slidy.view_all) + { + if (w3c_slidy.has_class(w3c_slidy.toolbar, "hidden")) + { + w3c_slidy.remove_class(w3c_slidy.toolbar, "hidden") + w3c_slidy.want_toolbar = 1; + } + else + { + w3c_slidy.add_class(w3c_slidy.toolbar, "hidden") + w3c_slidy.want_toolbar = 0; + } + } + }, + + scroll_x_offset: function () { + if (window.pageXOffset) + return self.pageXOffset; + + if (document.documentElement && + document.documentElement.scrollLeft) + return document.documentElement.scrollLeft; + + if (document.body) + return document.body.scrollLeft; + + return 0; + }, + + scroll_y_offset: function () { + if (window.pageYOffset) + return self.pageYOffset; + + if (document.documentElement && + document.documentElement.scrollTop) + return document.documentElement.scrollTop; + + if (document.body) + return document.body.scrollTop; + + return 0; + }, + + // looking for a way to determine height of slide content + // the slide itself is set to the height of the window + optimize_font_size: function () { + var slide = w3c_slidy.slides[w3c_slidy.slide_number]; + + //var dh = documentHeight(); //getDocHeight(document); + var dh = slide.scrollHeight; + var wh = getWindowHeight(); + var u = 100 * dh / wh; + + alert("window utilization = " + u + "% (doc " + + dh + " win " + wh + ")"); + }, + + // from document object + get_doc_height: function (doc) { + if (!doc) + doc = document; + + if (doc && doc.body && doc.body.offsetHeight) + return doc.body.offsetHeight; // ns/gecko syntax + + if (doc && doc.body && doc.body.scrollHeight) + return doc.body.scrollHeight; + + alert("couldn't determine document height"); + }, + + get_window_height: function () { + if ( typeof( window.innerHeight ) == 'number' ) + return window.innerHeight; // Non IE browser + + if (document.documentElement && document.documentElement.clientHeight) + return document.documentElement.clientHeight; // IE6 + + if (document.body && document.body.clientHeight) + return document.body.clientHeight; // IE4 + }, + + document_height: function () { + var sh, oh; + + sh = document.body.scrollHeight; + oh = document.body.offsetHeight; + + if (sh && oh) + { + return (sh > oh ? sh : oh); + } + + // no idea! + return 0; + }, + + smaller: function () { + if (w3c_slidy.size_index > 0) + { + --w3c_slidy.size_index; + } + + w3c_slidy.toolbar.style.display = "none"; + document.body.style.fontSize = w3c_slidy.sizes[w3c_slidy.size_index]; + var slide = w3c_slidy.slides[w3c_slidy.slide_number]; + w3c_slidy.hide_slide(slide); + w3c_slidy.show_slide(slide); + setTimeout(function () {w3c_slidy.show_toolbar(); }, 50); + }, + + bigger: function () { + if (w3c_slidy.size_index < w3c_slidy.sizes.length - 1) + { + ++w3c_slidy.size_index; + } + + w3c_slidy.toolbar.style.display = "none"; + document.body.style.fontSize = w3c_slidy.sizes[w3c_slidy.size_index]; + var slide = w3c_slidy.slides[w3c_slidy.slide_number]; + w3c_slidy.hide_slide(slide); + w3c_slidy.show_slide(slide); + setTimeout(function () {w3c_slidy.show_toolbar(); }, 50); + }, + + // enables cross browser use of relative width/height + // on object elements for use with SVG and Flash media + // with thanks to Ivan Herman for the suggestion + adjust_object_dimensions: function (width, height) { + for( var i = 0; i < w3c_slidy.objects.length; i++ ) + { + var obj = this.objects[i]; + var mimeType = obj.getAttribute("type"); + + if (mimeType == "image/svg+xml" || mimeType == "application/x-shockwave-flash") + { + if ( !obj.initialWidth ) + obj.initialWidth = obj.getAttribute("width"); + + if ( !obj.initialHeight ) + obj.initialHeight = obj.getAttribute("height"); + + if ( obj.initialWidth && obj.initialWidth.charAt(obj.initialWidth.length-1) == "%" ) + { + var w = parseInt(obj.initialWidth.slice(0, obj.initialWidth.length-1)); + var newW = width * (w/100.0); + obj.setAttribute("width",newW); + } + + if ( obj.initialHeight && + obj.initialHeight.charAt(obj.initialHeight.length-1) == "%" ) + { + var h = parseInt(obj.initialHeight.slice(0, obj.initialHeight.length-1)); + var newH = height * (h/100.0); + obj.setAttribute("height", newH); + } + } + } + }, + + // needed for Opera to inhibit default behavior + // since Opera delivers keyPress even if keyDown + // was cancelled + key_press: function (event) { + if (!event) + event = window.event; + + if (!w3c_slidy.key_wanted) + return w3c_slidy.cancel(event); + + return true; + }, + + // See e.g. http://www.quirksmode.org/js/events/keys.html for keycodes + key_down: function (event) { + var key, target, tag; + + w3c_slidy.key_wanted = true; + + if (!event) + event = window.event; + + // kludge around NS/IE differences + if (window.event) + { + key = window.event.keyCode; + target = window.event.srcElement; + } + else if (event.which) + { + key = event.which; + target = event.target; + } + else + return true; // Yikes! unknown browser + + // ignore event if key value is zero + // as for alt on Opera and Konqueror + if (!key) + return true; + + // avoid interfering with keystroke + // behavior for non-slidy chrome elements + if (!w3c_slidy.slidy_chrome(target) && + w3c_slidy.special_element(target)) + return true; + + // check for concurrent control/command/alt key + // but are these only present on mouse events? + + if (event.ctrlKey || event.altKey || event.metaKey) + return true; + + // dismiss table of contents if visible + if (w3c_slidy.is_shown_toc() && key != 9 && key != 16 && key != 38 && key != 40) + { + w3c_slidy.hide_table_of_contents(true); + + if (key == 27 || key == 84 || key == 67) + return w3c_slidy.cancel(event); + } + + if (key == 34) // Page Down + { + if (w3c_slidy.view_all) + return true; + + w3c_slidy.next_slide(false); + return w3c_slidy.cancel(event); + } + else if (key == 33) // Page Up + { + if (w3c_slidy.view_all) + return true; + + w3c_slidy.previous_slide(false); + return w3c_slidy.cancel(event); + } + else if (key == 32) // space bar + { + w3c_slidy.next_slide(true); + return w3c_slidy.cancel(event); + } + else if (key == 37) // Left arrow + { + w3c_slidy.previous_slide(!event.shiftKey); + return w3c_slidy.cancel(event); + } + else if (key == 36) // Home + { + w3c_slidy.first_slide(); + return w3c_slidy.cancel(event); + } + else if (key == 35) // End + { + w3c_slidy.last_slide(); + return w3c_slidy.cancel(event); + } + else if (key == 39) // Right arrow + { + w3c_slidy.next_slide(!event.shiftKey); + return w3c_slidy.cancel(event); + } + else if (key == 13) // Enter + { + if (w3c_slidy.outline) + { + if (w3c_slidy.outline.visible) + w3c_slidy.fold(w3c_slidy.outline); + else + w3c_slidy.unfold(w3c_slidy.outline); + + return w3c_slidy.cancel(event); + } + } + else if (key == 188) // < for smaller fonts + { + w3c_slidy.smaller(); + return w3c_slidy.cancel(event); + } + else if (key == 190) // > for larger fonts + { + w3c_slidy.bigger(); + return w3c_slidy.cancel(event); + } + else if (key == 189 || key == 109) // - for smaller fonts + { + w3c_slidy.smaller(); + return w3c_slidy.cancel(event); + } + else if (key == 187 || key == 191 || key == 107) // = + for larger fonts + { + w3c_slidy.bigger(); + return w3c_slidy.cancel(event); + } + else if (key == 83) // S for smaller fonts + { + w3c_slidy.smaller(); + return w3c_slidy.cancel(event); + } + else if (key == 66) // B for larger fonts + { + w3c_slidy.bigger(); + return w3c_slidy.cancel(event); + } + else if (key == 90) // Z for last slide + { + w3c_slidy.last_slide(); + return w3c_slidy.cancel(event); + } + else if (key == 70) // F for toggle toolbar + { + w3c_slidy.toggle_toolbar(); + return w3c_slidy.cancel(event); + } + else if (key == 65) // A for toggle view single/all slides + { + w3c_slidy.toggle_view(); + return w3c_slidy.cancel(event); + } + else if (key == 75) // toggle action of left click for next page + { + w3c_slidy.mouse_click_enabled = !w3c_slidy.mouse_click_enabled; + var alert_msg = (w3c_slidy.mouse_click_enabled ? + "enabled" : "disabled") + " mouse click advance"; + + alert(w3c_slidy.localize(alert_msg)); + return w3c_slidy.cancel(event); + } + else if (key == 84 || key == 67) // T or C for table of contents + { + if (w3c_slidy.toc) + w3c_slidy.toggle_table_of_contents(); + + return w3c_slidy.cancel(event); + } + else if (key == 72) // H for help + { + window.location = w3c_slidy.help_page; + return w3c_slidy.cancel(event); + } + //else alert("key code is "+ key); + + return true; + }, + + // safe for both text/html and application/xhtml+xml + create_element: function (name) { + if (this.xhtml && (typeof document.createElementNS != 'undefined')) + return document.createElementNS("http://www.w3.org/1999/xhtml", name) + + return document.createElement(name); + }, + + get_element_style: function (elem, IEStyleProp, CSSStyleProp) { + if (elem.currentStyle) + { + return elem.currentStyle[IEStyleProp]; + } + else if (window.getComputedStyle) + { + var compStyle = window.getComputedStyle(elem, ""); + return compStyle.getPropertyValue(CSSStyleProp); + } + return ""; + }, + + // the string str is a whitespace separated list of tokens + // test if str contains a particular token, e.g. "slide" + has_token: function (str, token) { + if (str) + { + // define pattern as regular expression + var pattern = /\w+/g; + + // check for matches + // place result in array + var result = str.match(pattern); + + // now check if desired token is present + for (var i = 0; i < result.length; i++) + { + if (result[i] == token) + return true; + } + } + + return false; + }, + + get_class_list: function (element) { + if (typeof element.className != 'undefined') + return element.className; + + return element.getAttribute("class"); + }, + + has_class: function (element, name) { + if (element.nodeType != 1) + return false; + + var regexp = new RegExp("(^| )" + name + "\W*"); + + if (typeof element.className != 'undefined') + return regexp.test(element.className); + + return regexp.test(element.getAttribute("class")); + }, + + remove_class: function (element, name) { + var regexp = new RegExp("(^| )" + name + "\W*"); + var clsval = ""; + + if (typeof element.className != 'undefined') + { + clsval = element.className; + + if (clsval) + { + clsval = clsval.replace(regexp, ""); + element.className = clsval; + } + } + else + { + clsval = element.getAttribute("class"); + + if (clsval) + { + clsval = clsval.replace(regexp, ""); + element.setAttribute("class", clsval); + } + } + }, + + add_class: function (element, name) { + if (!this.has_class(element, name)) + { + if (typeof element.className != 'undefined') + element.className += " " + name; + else + { + var clsval = element.getAttribute("class"); + clsval = clsval ? clsval + " " + name : name; + element.setAttribute("class", clsval); + } + } + }, + + // HTML elements that can be used with class="incremental" + // note that you can also put the class on containers like + // up, ol, dl, and div to make their contents appear + // incrementally. Upper case is used since this is what + // browsers report for HTML node names (text/html). + incremental_elements: null, + okay_for_incremental: function (name) { + if (!this.incremental_elements) + { + var inclist = new Array(); + inclist["p"] = true; + inclist["pre"] = true; + inclist["li"] = true; + inclist["blockquote"] = true; + inclist["dt"] = true; + inclist["dd"] = true; + inclist["h2"] = true; + inclist["h3"] = true; + inclist["h4"] = true; + inclist["h5"] = true; + inclist["h6"] = true; + inclist["span"] = true; + inclist["address"] = true; + inclist["table"] = true; + inclist["tr"] = true; + inclist["th"] = true; + inclist["td"] = true; + inclist["img"] = true; + inclist["object"] = true; + this.incremental_elements = inclist; + } + return this.incremental_elements[name.toLowerCase()]; + }, + + next_incremental_item: function (node) { + var br = this.is_xhtml ? "br" : "BR"; + var slide = w3c_slidy.slides[w3c_slidy.slide_number]; + + for (;;) + { + node = w3c_slidy.next_node(slide, node); + + if (node == null || node.parentNode == null) + break; + + if (node.nodeType == 1) // ELEMENT + { + if (node.nodeName == br) + continue; + + if (w3c_slidy.has_class(node, "incremental") + && w3c_slidy.okay_for_incremental(node.nodeName)) + return node; + + if (w3c_slidy.has_class(node.parentNode, "incremental") + && !w3c_slidy.has_class(node, "non-incremental")) + return node; + } + } + + return node; + }, + + previous_incremental_item: function (node) { + var br = this.is_xhtml ? "br" : "BR"; + var slide = w3c_slidy.slides[w3c_slidy.slide_number]; + + for (;;) + { + node = w3c_slidy.previous_node(slide, node); + + if (node == null || node.parentNode == null) + break; + + if (node.nodeType == 1) + { + if (node.nodeName == br) + continue; + + if (w3c_slidy.has_class(node, "incremental") + && w3c_slidy.okay_for_incremental(node.nodeName)) + return node; + + if (w3c_slidy.has_class(node.parentNode, "incremental") + && !w3c_slidy.has_class(node, "non-incremental")) + return node; + } + } + + return node; + }, + + // set visibility for all elements on current slide with + // a parent element with attribute class="incremental" + set_visibility_all_incremental: function (value) { + var node = this.next_incremental_item(null); + + if (value == "hidden") + { + while (node) + { + w3c_slidy.add_class(node, "invisible"); + node = w3c_slidy.next_incremental_item(node); + } + } + else // value == "visible" + { + while (node) + { + w3c_slidy.remove_class(node, "invisible"); + node = w3c_slidy.next_incremental_item(node); + } + } + }, + + // reveal the next hidden item on the slide + // node is null or the node that was last revealed + reveal_next_item: function (node) { + node = w3c_slidy.next_incremental_item(node); + + if (node && node.nodeType == 1) // an element + w3c_slidy.remove_class(node, "invisible"); + + return node; + }, + + // exact inverse of revealNextItem(node) + hide_previous_item: function (node) { + if (node && node.nodeType == 1) // an element + w3c_slidy.add_class(node, "invisible"); + + return this.previous_incremental_item(node); + }, + + // left to right traversal of root's content + next_node: function (root, node) { + if (node == null) + return root.firstChild; + + if (node.firstChild) + return node.firstChild; + + if (node.nextSibling) + return node.nextSibling; + + for (;;) + { + node = node.parentNode; + + if (!node || node == root) + break; + + if (node && node.nextSibling) + return node.nextSibling; + } + + return null; + }, + + // right to left traversal of root's content + previous_node: function (root, node) { + if (node == null) + { + node = root.lastChild; + + if (node) + { + while (node.lastChild) + node = node.lastChild; + } + + return node; + } + + if (node.previousSibling) + { + node = node.previousSibling; + + while (node.lastChild) + node = node.lastChild; + + return node; + } + + if (node.parentNode != root) + return node.parentNode; + + return null; + }, + + previous_sibling_element: function (el) { + el = el.previousSibling; + + while (el && el.nodeType != 1) + el = el.previousSibling; + + return el; + }, + + next_sibling_element: function (el) { + el = el.nextSibling; + + while (el && el.nodeType != 1) + el = el.nextSibling; + + return el; + }, + + first_child_element: function (el) { + var node; + + for (node = el.firstChild; node; node = node.nextSibling) + { + if (node.nodeType == 1) + break; + } + + return node; + }, + + first_tag: function (element, tag) { + var node; + + if (!this.is_xhtml) + tag = tag.toUpperCase(); + + for (node = element.firstChild; node; node = node.nextSibling) + { + if (node.nodeType == 1 && node.nodeName == tag) + break; + } + + return node; + }, + + hide_selection: function () { + if (window.getSelection) // Firefox, Chromium, Safari, Opera + { + var selection = window.getSelection(); + + if (selection.rangeCount > 0) + { + var range = selection.getRangeAt(0); + range.collapse (false); + } + } + else // Internet Explorer + { + var textRange = document.selection.createRange (); + textRange.collapse (false); + } + }, + + get_selected_text: function () { + try + { + if (window.getSelection) + return window.getSelection().toString(); + + if (document.getSelection) + return document.getSelection().toString(); + + if (document.selection) + return document.selection.createRange().text; + } + catch (e) + { + } + + return ""; + }, + + // make note of length of selected text + // as this evaluates to zero in click event + mouse_button_up: function (e) { + w3c_slidy.selected_text_len = w3c_slidy.get_selected_text().length; + }, + + mouse_button_down: function (e) { + w3c_slidy.selected_text_len = w3c_slidy.get_selected_text().length; + w3c_slidy.mouse_x = e.clientX; + w3c_slidy.mouse_y = e.clientY; + }, + + // right mouse button click is reserved for context menus + // it is more reliable to detect rightclick than leftclick + mouse_button_click: function (e) { + if (!e) + var e = window.event; + + if (Math.abs(e.clientX -w3c_slidy.mouse_x) + + Math.abs(e.clientY -w3c_slidy.mouse_y) > 10) + return true; + + if (w3c_slidy.selected_text_len > 0) + return true; + + var rightclick = false; + var leftclick = false; + var middleclick = false; + var target; + + if (!e) + var e = window.event; + + if (e.target) + target = e.target; + else if (e.srcElement) + target = e.srcElement; + + // work around Safari bug + if (target.nodeType == 3) + target = target.parentNode; + + if (e.which) // all browsers except IE + { + leftclick = (e.which == 1); + middleclick = (e.which == 2); + rightclick = (e.which == 3); + } + else if (e.button) + { + // Konqueror gives 1 for left, 4 for middle + // IE6 gives 0 for left and not 1 as I expected + + if (e.button == 4) + middleclick = true; + + // all browsers agree on 2 for right button + rightclick = (e.button == 2); + } + else + leftclick = true; + + if (w3c_slidy.selected_text_len > 0) + { + w3c_slidy.stop_propagation(e); + e.cancel = true; + e.returnValue = false; + return false; + } + + // dismiss table of contents + w3c_slidy.hide_table_of_contents(false); + + // check if target is something that probably want's clicks + // e.g. a, embed, object, input, textarea, select, option + var tag = target.nodeName.toLowerCase(); + + if (w3c_slidy.mouse_click_enabled && leftclick && + !w3c_slidy.special_element(target) && + !target.onclick) + { + w3c_slidy.next_slide(true); + w3c_slidy.stop_propagation(e); + e.cancel = true; + e.returnValue = false; + return false; + } + + return true; + }, + + special_element: function (element) { + if (this.has_class(element, "non-interactive")) + return false; + + var tag = element.nodeName.toLowerCase(); + + return element.onkeydown || + element.onclick || + tag == "a" || + tag == "embed" || + tag == "object" || + tag == "video" || + tag == "audio" || + tag == "svg" || + tag == "canvas" || + tag == "input" || + tag == "textarea" || + tag == "select" || + tag == "option"; + }, + + slidy_chrome: function (el) { + while (el) + { + if (el == w3c_slidy.toc || + el == w3c_slidy.toolbar || + w3c_slidy.has_class(el, "outline")) + return true; + + el = el.parentNode; + } + + return false; + }, + + get_key: function (e) + { + var key; + + // kludge around NS/IE differences + if (typeof window.event != "undefined") + key = window.event.keyCode; + else if (e.which) + key = e.which; + + return key; + }, + + get_target: function (e) { + var target; + + if (!e) + e = window.event; + + if (e.target) + target = e.target; + else if (e.srcElement) + target = e.srcElement; + + if (target.nodeType != 1) + target = target.parentNode; + + return target; + }, + + // does display property provide correct defaults? + is_block: function (elem) { + var tag = elem.nodeName.toLowerCase(); + + return tag == "ol" || tag == "ul" || tag == "p" || + tag == "li" || tag == "table" || tag == "pre" || + tag == "h1" || tag == "h2" || tag == "h3" || + tag == "h4" || tag == "h5" || tag == "h6" || + tag == "blockquote" || tag == "address"; + }, + + add_listener: function (element, event, handler) { + if (window.addEventListener) + element.addEventListener(event, handler, false); + else + element.attachEvent("on"+event, handler); + }, + + // used to prevent event propagation from field controls + stop_propagation: function (event) { + event = event ? event : window.event; + event.cancelBubble = true; // for IE + + if (event.stopPropagation) + event.stopPropagation(); + + return true; + }, + + cancel: function (event) { + if (event) + { + event.cancel = true; + event.returnValue = false; + + if (event.preventDefault) + event.preventDefault(); + } + + w3c_slidy.key_wanted = false; + return false; + }, + +// for each language define an associative array +// and also the help text which is longer + + strings_es: { + "slide":"pág.", + "help?":"Ayuda", + "contents?":"Índice", + "table of contents":"tabla de contenidos", + "Table of Contents":"Tabla de Contenidos", + "restart presentation":"Reiniciar presentación", + "restart?":"Inicio" + }, + help_es: + "Utilice el ratón, barra espaciadora, teclas Izda/Dcha, " + + "o Re pág y Av pág. Use S y B para cambiar el tamaño de fuente.", + + strings_ca: { + "slide":"pàg..", + "help?":"Ajuda", + "contents?":"Índex", + "table of contents":"taula de continguts", + "Table of Contents":"Taula de Continguts", + "restart presentation":"Reiniciar presentació", + "restart?":"Inici" + }, + help_ca: + "Utilitzi el ratolí, barra espaiadora, tecles Esq./Dta. " + + "o Re pàg y Av pàg. Usi S i B per canviar grandària de font.", + + strings_cs: { + "slide":"snímek", + "help?":"nápověda", + "contents?":"obsah", + "table of contents":"obsah prezentace", + "Table of Contents":"Obsah prezentace", + "restart presentation":"znovu spustit prezentaci", + "restart?":"restart" + }, + help_cs: + "Prezentaci můžete procházet pomocí kliknutí myši, mezerníku, " + + "šipek vlevo a vpravo nebo kláves PageUp a PageDown. Písmo se " + + "dá zvětšit a zmenšit pomocí kláves B a S.", + + strings_nl: { + "slide":"pagina", + "help?":"Help?", + "contents?":"Inhoud?", + "table of contents":"inhoudsopgave", + "Table of Contents":"Inhoudsopgave", + "restart presentation":"herstart presentatie", + "restart?":"Herstart?" + }, + help_nl: + "Navigeer d.m.v. het muis, spatiebar, Links/Rechts toetsen, " + + "of PgUp en PgDn. Gebruik S en B om de karaktergrootte te veranderen.", + + strings_de: { + "slide":"Seite", + "help?":"Hilfe", + "contents?":"Übersicht", + "table of contents":"Inhaltsverzeichnis", + "Table of Contents":"Inhaltsverzeichnis", + "restart presentation":"Präsentation neu starten", + "restart?":"Neustart" + }, + help_de: + "Benutzen Sie die Maus, Leerschlag, die Cursortasten links/rechts oder " + + "Page up/Page Down zum Wechseln der Seiten und S und B für die Schriftgrösse.", + + strings_pl: { + "slide":"slajd", + "help?":"pomoc?", + "contents?":"spis treści?", + "table of contents":"spis treści", + "Table of Contents":"Spis Treści", + "restart presentation":"Restartuj prezentację", + "restart?":"restart?" + }, + help_pl: + "Zmieniaj slajdy klikając myszą, naciskając spację, strzałki lewo/prawo" + + "lub PgUp / PgDn. Użyj klawiszy S i B, aby zmienić rozmiar czczionki.", + + strings_fr: { + "slide":"page", + "help?":"Aide", + "contents?":"Index", + "table of contents":"table des matières", + "Table of Contents":"Table des matières", + "restart presentation":"Recommencer l'exposé", + "restart?":"Début" + }, + help_fr: + "Naviguez avec la souris, la barre d'espace, les flèches " + + "gauche/droite ou les touches Pg Up, Pg Dn. Utilisez " + + "les touches S et B pour modifier la taille de la police.", + + strings_hu: { + "slide":"oldal", + "help?":"segítség", + "contents?":"tartalom", + "table of contents":"tartalomjegyzék", + "Table of Contents":"Tartalomjegyzék", + "restart presentation":"bemutató újraindítása", + "restart?":"újraindítás" + }, + help_hu: + "Az oldalak közti lépkedéshez kattintson az egérrel, vagy " + + "használja a szóköz, a bal, vagy a jobb nyíl, illetve a Page Down, " + + "Page Up billentyűket. Az S és a B billentyűkkel változtathatja " + + "a szöveg méretét.", + + strings_it: { + "slide":"pag.", + "help?":"Aiuto", + "contents?":"Indice", + "table of contents":"indice", + "Table of Contents":"Indice", + "restart presentation":"Ricominciare la presentazione", + "restart?":"Inizio" + }, + help_it: + "Navigare con mouse, barra spazio, frecce sinistra/destra o " + + "PgUp e PgDn. Usare S e B per cambiare la dimensione dei caratteri.", + + strings_el: { + "slide":"σελίδα", + "help?":"βοήθεια;", + "contents?":"περιεχόμενα;", + "table of contents":"πίνακας περιεχομένων", + "Table of Contents":"Πίνακας Περιεχομένων", + "restart presentation":"επανεκκίνηση παρουσίασης", + "restart?":"επανεκκίνηση;" + }, + help_el: + "Πλοηγηθείτε με το κλίκ του ποντικιού, το space, τα βέλη αριστερά/δεξιά, " + + "ή Page Up και Page Down. Χρησιμοποιήστε τα πλήκτρα S και B για να αλλάξετε " + + "το μέγεθος της γραμματοσειράς.", + + strings_ja: { + "slide":"スライド", + "help?":"ヘルプ", + "contents?":"目次", + "table of contents":"目次を表示", + "Table of Contents":"目次", + "restart presentation":"最初から再生", + "restart?":"最初から" + }, + help_ja: + "マウス左クリック ・ スペース ・ 左右キー " + + "または Page Up ・ Page Downで操作, S ・ Bでフォントサイズ変更", + + strings_zh: { + "slide":"幻灯片", + "help?":"帮助?", + "contents?":"内容?", + "table of contents":"目录", + "Table of Contents":"目录", + "restart presentation":"重新启动展示", + "restart?":"重新启动?" + }, + help_zh: + "用鼠标点击, 空格条, 左右箭头, Pg Up 和 Pg Dn 导航. " + + "用 S, B 改变字体大小.", + + strings_ru: { + "slide":"слайд", + "help?":"помощь?", + "contents?":"содержание?", + "table of contents":"оглавление", + "Table of Contents":"Оглавление", + "restart presentation":"перезапустить презентацию", + "restart?":"перезапуск?" + }, + help_ru: + "Перемещайтесь кликая мышкой, используя клавишу пробел, стрелки" + + "влево/вправо или Pg Up и Pg Dn. Клавиши S и B меняют размер шрифта.", + + strings_sv: { + "slide":"sida", + "help?":"hjälp", + "contents?":"innehåll", + "table of contents":"innehållsförteckning", + "Table of Contents":"Innehållsförteckning", + "restart presentation":"visa presentationen från början", + "restart?":"börja om" + }, + help_sv: + "Bläddra med ett klick med vänstra musknappen, mellanslagstangenten, " + + "vänster- och högerpiltangenterna eller tangenterna Pg Up, Pg Dn. " + + "Använd tangenterna S och B för att ändra textens storlek.", + + strings: { }, + + localize: function (src) { + if (src == "") + return src; + + // try full language code, e.g. en-US + var s, lookup = w3c_slidy.strings[w3c_slidy.lang]; + + if (lookup) + { + s = lookup[src]; + + if (s) + return s; + } + + // strip country code suffix, e.g. + // try en if undefined for en-US + var lg = w3c_slidy.lang.split("-"); + + if (lg.length > 1) + { + lookup = w3c_slidy.strings[lg[0]]; + + if (lookup) + { + s = lookup[src]; + + if (s) + return s; + } + } + + // otherwise string as is + return src; + }, + + init_localization: function () { + var i18n = w3c_slidy; + var help_text = w3c_slidy.help_text; + + // each such language array is declared in the localize array + // this is used as in w3c_slidy.localize("foo"); + this.strings = { + "es":this.strings_es, + "ca":this.strings_ca, + "cs":this.strings_cs, + "nl":this.strings_nl, + "de":this.strings_de, + "pl":this.strings_pl, + "fr":this.strings_fr, + "hu":this.strings_hu, + "it":this.strings_it, + "el":this.strings_el, + "jp":this.strings_ja, + "zh":this.strings_zh, + "ru":this.strings_ru, + "sv":this.strings_sv + }, + + i18n.strings_es[help_text] = i18n.help_es; + i18n.strings_ca[help_text] = i18n.help_ca; + i18n.strings_cs[help_text] = i18n.help_cs; + i18n.strings_nl[help_text] = i18n.help_nl; + i18n.strings_de[help_text] = i18n.help_de; + i18n.strings_pl[help_text] = i18n.help_pl; + i18n.strings_fr[help_text] = i18n.help_fr; + i18n.strings_hu[help_text] = i18n.help_hu; + i18n.strings_it[help_text] = i18n.help_it; + i18n.strings_el[help_text] = i18n.help_el; + i18n.strings_ja[help_text] = i18n.help_ja; + i18n.strings_zh[help_text] = i18n.help_zh; + i18n.strings_ru[help_text] = i18n.help_ru; + i18n.strings_sv[help_text] = i18n.help_sv; + + w3c_slidy.lang = document.body.parentNode.getAttribute("lang"); + + if (!w3c_slidy.lang) + w3c_slidy.lang = document.body.parentNode.getAttribute("xml:lang"); + + if (!w3c_slidy.lang) + w3c_slidy.lang = "en"; + } +}; + +// hack for back button behavior +if (w3c_slidy.ie6 || w3c_slidy.ie7) +{ + document.write(""); +} + +// attach event listeners for initialization +w3c_slidy.set_up(); + +// hide the slides as soon as body element is available +// to reduce annoying screen mess before the onload event +setTimeout(w3c_slidy.hide_slides, 50); + diff --git a/www/graduation/styles/slidy.css b/www/graduation/styles/slidy.css new file mode 100644 index 0000000..0197e64 --- /dev/null +++ b/www/graduation/styles/slidy.css @@ -0,0 +1,405 @@ +/* slidy.css + + Copyright (c) 2005-2010 W3C (MIT, ERCIM, Keio), All Rights Reserved. + W3C liability, trademark, document use and software licensing + rules apply, see: + + http://www.w3.org/Consortium/Legal/copyright-documents + http://www.w3.org/Consortium/Legal/copyright-software +*/ +body +{ + margin: 0 0 0 0; + padding: 0 0 0 0; + width: 100%; + height: 100%; + color: black; + background-color: white; + font-family: "Gill Sans MT", "Gill Sans", GillSans, sans-serif; + font-size: 14pt; +} + +div.toolbar { + position: fixed; z-index: 200; + top: auto; bottom: 0; left: 0; right: 0; + height: 1.2em; text-align: right; + padding-left: 1em; + padding-right: 1em; + font-size: 60%; + color: red; + background-color: rgb(240,240,240); + border-top: solid 1px rgb(180,180,180); +} + +div.toolbar span.copyright { + color: black; + margin-left: 0.5em; +} + +div.initial_prompt { + position: absolute; + z-index: 1000; + bottom: 1.2em; + width: 100%; + background-color: rgb(200,200,200); + opacity: 0.35; + background-color: rgb(200,200,200, 0.35); + cursor: pointer; +} + +div.initial_prompt p.help { + text-align: center; +} + +div.initial_prompt p.close { + text-align: right; + font-style: italic; +} + +div.slidy_toc { + position: absolute; + z-index: 300; + width: 60%; + max-width: 30em; + height: 30em; + overflow: auto; + top: auto; + right: auto; + left: 4em; + bottom: 4em; + padding: 1em; + background: rgb(240,240,240); + border-style: solid; + border-width: 2px; + font-size: 60%; +} + +div.slidy_toc .toc_heading { + text-align: center; + width: 100%; + margin: 0; + margin-bottom: 1em; + border-bottom-style: solid; + border-bottom-color: rgb(180,180,180); + border-bottom-width: 1px; +} + +div.slide { + z-index: 20; + margin: 0 0 0 0; + padding-top: 0; + padding-bottom: 0; + padding-left: 20px; + padding-right: 20px; + border-width: 0; + clear: both; + top: 0; + bottom: 0; + left: 0; + right: 0; + line-height: 120%; + background-color: transparent; +} + +div.background { + display: none; +} + +div.handout { + margin-left: 20px; + margin-right: 20px; +} + +div.slide.titlepage { + text-align: center; +} + +div.slide.titlepage h1 { + padding-top: 10%; + margin-right: 0; +} + +div.slide h1 { + padding-left: 0; + padding-right: 20pt; + padding-top: 4pt; + padding-bottom: 4pt; + margin-top: 0; + margin-left: 0; + margin-right: 60pt; + margin-bottom: 0.5em; + display: block; + font-size: 160%; + line-height: 1.2em; + background: transparent; +} + +div.toc { + position: absolute; + top: auto; + bottom: 4em; + left: 4em; + right: auto; + width: 60%; + max-width: 30em; + height: 30em; + border: solid thin black; + padding: 1em; + background: rgb(240,240,240); + color: black; + z-index: 300; + overflow: auto; + display: block; + visibility: visible; +} + +div.toc-heading { + width: 100%; + border-bottom: solid 1px rgb(180,180,180); + margin-bottom: 1em; + text-align: center; +} + +img { + image-rendering: optimize-quality; +} + +pre { + font-size: 80%; + font-weight: bold; + line-height: 120%; + padding-top: 0.2em; + padding-bottom: 0.2em; + padding-left: 1em; + padding-right: 1em; + border-style: solid; + border-left-width: 1em; + border-top-width: thin; + border-right-width: thin; + border-bottom-width: thin; + border-color: #95ABD0; + color: #00428C; + background-color: #E4E5E7; +} + +li pre { margin-left: 0; } + +blockquote { font-style: italic } + +img { background-color: transparent } + +p.copyright { font-size: smaller } + +.center { text-align: center } +.footnote { font-size: smaller; margin-left: 2em; } + +a img { border-width: 0; border-style: none } + +a:visited { color: navy } +a:link { color: navy } +a:hover { color: red; text-decoration: underline } +a:active { color: red; text-decoration: underline } + +a {text-decoration: none} +.navbar a:link {color: white} +.navbar a:visited {color: yellow} +.navbar a:active {color: red} +.navbar a:hover {color: red} + +ul { list-style-type: square; } +ul ul { list-style-type: disc; } +ul ul ul { list-style-type: circle; } +ul ul ul ul { list-style-type: disc; } +li { margin-left: 0.5em; margin-top: 0.5em; } +li li { font-size: 85%; font-style: italic } +li li li { font-size: 85%; font-style: normal } + +div dt +{ + margin-left: 0; + margin-top: 1em; + margin-bottom: 0.5em; + font-weight: bold; +} +div dd +{ + margin-left: 2em; + margin-bottom: 0.5em; +} + + +p,pre,ul,ol,blockquote,h2,h3,h4,h5,h6,dl,table { + margin-left: 1em; + margin-right: 1em; +} + +p.subhead { font-weight: bold; margin-top: 2em; } + +.smaller { font-size: smaller } +.bigger { font-size: 130% } + +td,th { padding: 0.2em } + +ul { + margin: 0.5em 1.5em 0.5em 1.5em; + padding: 0; +} + +ol { + margin: 0.5em 1.5em 0.5em 1.5em; + padding: 0; +} + +ul { list-style-type: square; } +ul ul { list-style-type: disc; } +ul ul ul { list-style-type: circle; } +ul ul ul ul { list-style-type: disc; } + +ul li { + list-style: square; + margin: 0.1em 0em 0.6em 0; + padding: 0 0 0 0; + line-height: 140%; +} + +ol li { + margin: 0.1em 0em 0.6em 1.5em; + padding: 0 0 0 0px; + line-height: 140%; + list-style-type: decimal; +} + +li ul li { + font-size: 85%; + font-style: italic; + list-style-type: disc; + background: transparent; + padding: 0 0 0 0; +} +li li ul li { + font-size: 85%; + font-style: normal; + list-style-type: circle; + background: transparent; + padding: 0 0 0 0; +} +li li li ul li { + list-style-type: disc; + background: transparent; + padding: 0 0 0 0; +} + +li ol li { + list-style-type: decimal; +} + + +li li ol li { + list-style-type: decimal; +} + +/* + setting class="outline on ol or ul makes it behave as an + ouline list where blocklevel content in li elements is + hidden by default and can be expanded or collapsed with + mouse click. Set class="expand" on li to override default +*/ + +ol.outline li:hover { cursor: pointer } +ol.outline li.nofold:hover { cursor: default } + +ul.outline li:hover { cursor: pointer } +ul.outline li.nofold:hover { cursor: default } + +ol.outline { list-style:decimal; } +ol.outline ol { list-style-type:lower-alpha } + +ol.outline li.nofold { + padding: 0 0 0 20px; + background: transparent url(../graphics/nofold-dim.gif) no-repeat 0px 0.5em; +} +ol.outline li.unfolded { + padding: 0 0 0 20px; + background: transparent url(../graphics/fold-dim.gif) no-repeat 0px 0.5em; +} +ol.outline li.folded { + padding: 0 0 0 20px; + background: transparent url(../graphics/unfold-dim.gif) no-repeat 0px 0.5em; +} +ol.outline li.unfolded:hover { + padding: 0 0 0 20px; + background: transparent url(../graphics/fold.gif) no-repeat 0px 0.5em; +} +ol.outline li.folded:hover { + padding: 0 0 0 20px; + background: transparent url(../graphics/unfold.gif) no-repeat 0px 0.5em; +} + +ul.outline li.nofold { + padding: 0 0 0 20px; + background: transparent url(../graphics/nofold-dim.gif) no-repeat 0px 0.5em; +} +ul.outline li.unfolded { + padding: 0 0 0 20px; + background: transparent url(../graphics/fold-dim.gif) no-repeat 0px 0.5em; +} +ul.outline li.folded { + padding: 0 0 0 20px; + background: transparent url(../graphics/unfold-dim.gif) no-repeat 0px 0.5em; +} +ul.outline li.unfolded:hover { + padding: 0 0 0 20px; + background: transparent url(../graphics/fold.gif) no-repeat 0px 0.5em; +} +ul.outline li.folded:hover { + padding: 0 0 0 20px; + background: transparent url(../graphics/unfold.gif) no-repeat 0px 0.5em; +} + +/* for slides with class "title" in table of contents */ +a.titleslide { font-weight: bold; font-style: italic } + +/* + hide images for work around for save as bug + where browsers fail to save images used by CSS +*/ +img.hidden { display: none; visibility: hidden } +div.initial_prompt { display: none; visibility: hidden } + + div.slide { + visibility: visible; + position: inherit; + } + div.handout { + border-top-style: solid; + border-top-width: thin; + border-top-color: black; + } + +@media screen { + .hidden { display: none; visibility: visible } + + div.slide.hidden { display: block; visibility: visible } + div.handout.hidden { display: block; visibility: visible } + div.background { display: none; visibility: hidden } + body.single_slide div.initial_prompt { display: block; visibility: visible } + body.single_slide div.background { display: block; visibility: visible } + body.single_slide div.background.hidden { display: none; visibility: hidden } + body.single_slide .invisible { visibility: hidden } + body.single_slide .hidden { display: none; visibility: hidden } + body.single_slide div.slide { position: absolute } + body.single_slide div.handout { display: none; visibility: hidden } +} + +@media print { + .hidden { display: block; visibility: visible } + + div.slide pre { font-size: 60%; padding-left: 0.5em; } + div.toolbar { display: none; visibility: hidden; } + div.slidy_toc { display: none; visibility: hidden; } + div.background { display: none; visibility: hidden; } + div.slide { page-break-before: always } + /* :first-child isn't reliable for print media */ + div.slide.first-slide { page-break-before: avoid } +} + diff --git a/www/graduation/styles/zuul.css b/www/graduation/styles/zuul.css new file mode 100644 index 0000000..c342b66 --- /dev/null +++ b/www/graduation/styles/zuul.css @@ -0,0 +1,486 @@ +/* w3c-blue.css + + Copyright (c) 2005-2010 W3C (MIT, ERCIM, Keio), All Rights Reserved. + W3C liability, trademark, document use and software licensing + rules apply, see: + + http://www.w3.org/Consortium/Legal/copyright-documents + http://www.w3.org/Consortium/Legal/copyright-software +*/ +body +{ + margin: 0 0 0 0; + padding: 0 0 0 0; + width: 100%; + height: 100%; + color: black; + background-color: white; + font-family: "Open Sans", OpenSans, sans-serif; + font-size: 14pt; +} + +div.slide.titlepage { + text-align: center; +} + +div.slide.titlepage h1 { + padding-top: 40%; +} + +div.slide { + z-index: 20; + margin: 0 0 0 0; + padding: 0; + border-width: 0; + top: 0; + bottom: 0; + left: 0; + right: 0; + line-height: 120%; + background-color: transparent; +} + +div.background { + z-index: 1; + position: absolute; + vertical-align: bottom; + left: 0; + right: 0; + top: 0; + bottom: auto; + height: 6.0em; + padding: 0 0 0 0.2em; + margin: 0 0 0 0; + background-color: #fff; + border-bottom: solid 3px #071d49; +} + +div.background img { + height: 4em; +} + +/* this rule is hidden from IE which doesn't support + selector */ +div.slide + div[class].slide { page-break-before: always;} + +div.slide h1 { + padding-right: 3em; + padding-top: 1.5em; + margin-bottom: 1.2em; + margin-left: 5em; + margin-right: 0; + min-height: 2.3em; + color: #071d49; + height: 2.2em; + font-size: 160%; + line-height: 1.1em; +} + +div.slide h1 a { + color: white; + text-decoration: none; +} + +div.slide h1 a:link { + color: white; + text-decoration: none; +} + +div.slide h1 a:visited { + color: white; + text-decoration: none; +} + +div.slide h1 a:hover { + color: white; + text-decoration: underline; +} + +div.slide h1 a:active { + color: red; + text-decoration: underline; +} + +#head-logo { + margin: 0; + margin-top: 0.25em; + padding-top: 0.3em; + padding-bottom: 0.2em; + padding-left: .3em; + padding-right: 0; + height: 3.8em; + width: 5.8em; + float: left; + z-index: 2; +} + +#head-logo-fallback { + margin: 0; + padding: 0; + margin-top: -0.8em; + width: 4.8em; + float: right; + z-index: 2; +} + +/* the next two classes support vertical and horizontal centering */ +div.vbox { + float: left; + height: 40%; + width: 50%; + margin-top: -240px; +} +div.hbox { + width:60%; + margin-top: 0; + margin-left:auto; + margin-right:auto; + height: 60%; + border:1px solid silver; + background:#F0F0F0; + overflow:auto; + text-align:left; + clear:both; +} + +/* styling for named background */ +div.background.slanty { + z-index: 2; + bottom: 0; + height: 100%; + background: transparent; +} + +div.background.slanty img { margin-top: 4em; width: 100%; height: 80% } + +/* the following makes the pre background translucent */ +/* opacity is a CSS3 property but supported by Mozilla family */ +/* filter is an IE specific feature that also requires width */ +div.slide.slanty pre { + width: 93%; /* needed for IE filter to work */ + opacity: .8; + filter: alpha(opacity=80); +} + +img.withBorder { + border: 2px solid #c60; + padding: 4px; +} + +li pre { margin-left: 0; } + +@media print { pre { font-size: 60% } } + +blockquote { font-style: italic } + +img { background-color: transparent } + +p.copyright { font-size: smaller } + +.center { text-align: center } +.footnote { font-size: smaller; margin-left: 2em; } + +a img { border-width: 0; border-style: none } + +a:visited { color: navy } +a:link { color: navy } +a:hover { color: red; text-decoration: underline } +a:active { color: red; text-decoration: underline } + +a {text-decoration: none} +.navbar a:link {color: white} +.navbar a:visited {color: yellow} +.navbar a:active {color: red} +.navbar a:hover {color: red} + +ul { list-style-type: square; } +ul ul { list-style-type: disc; } +ul ul ul { list-style-type: circle; } +ul ul ul ul { list-style-type: disc; } +li { margin-left: 0.5em; margin-top: 0.5em; } +li li { font-size: 85%; font-style: italic } +li li li { font-size: 85%; font-style: normal } + +div dt +{ + margin-left: 0; + margin-top: 1em; + margin-bottom: 0.5em; + font-weight: bold; +} +div dd +{ + margin-left: 2em; + margin-bottom: 0.5em; +} + + +p,pre,ul,ol,blockquote,h2,h3,h4,h5,h6,dl,table { + margin-left: 1.4em; + margin-right: 1em; +} + +p.subhead { font-weight: bold; margin-top: 2em; } + +div.cover p.explanation { + font-style: italic; + margin-top: 3em; +} + + +.smaller { font-size: smaller } + +td,th { padding: 0.2em } + +ul { + margin: 0.5em 1.5em 0.5em 1.5em; + padding: 0; +} + +ol { + margin: 0.5em 1.5em 0.5em 1.5em; + padding: 0; +} + +ul { list-style-type: square; } +ul ul { list-style-type: disc; } +ul ul ul { list-style-type: circle; } +ul ul ul ul { list-style-type: disc; } +li { margin-left: 0.5em; margin-top: 0.5em; } +li li { font-size: 85%; font-style: italic } +li li li { font-size: 85%; font-style: normal } + + +ul li { + list-style: none; + margin: 0.1em 0em 0.6em 0; + padding: 0 0 0 40px; + background: transparent url(../graphics/bullet.png) no-repeat 5px 0.3em; + line-height: 140%; +} + +/* workaround IE's failure to support background on li for print media */ +@media print { ul li { list-style: disc; padding-left: 0; background: none; } } + +ol li { + margin: 0.1em 0em 0.6em 1.5em; + padding: 0 0 0 0px; + line-height: 140%; +} + +li li { + font-size: 85%; + font-style: italic; + list-style-type: disc; + background: transparent; + padding: 0 0 0 0; +} +li li li { + font-size: 85%; + font-style: normal; + list-style-type: circle; + background: transparent; + padding: 0 0 0 0; +} +li li li li { + list-style-type: disc; + background: transparent; + padding: 0 0 0 0; +} + +/* rectangular blue bullet + unfold/nofold/fold widget */ + +/* + setting class="outline on ol or ul makes it behave as an + ouline list where blocklevel content in li elements is + hidden by default and can be expanded or collapsed with + mouse click. Set class="expand" on li to override default +*/ + +ol.outline li:hover { cursor: pointer } +ol.outline li.nofold:hover { cursor: default } + +ul.outline li:hover { cursor: pointer } +ul.outline li.nofold:hover { cursor: default } + +ol.outline { list-style:decimal; } +ol.outline ol { list-style-type:lower-alpha } + +ol.outline li.nofold { + padding: 0 0 0 20px; + background: transparent url(../graphics/nofold-dim.gif) no-repeat 0px 0.3em; +} +ol.outline li.unfolded { + padding: 0 0 0 20px; + background: transparent url(../graphics/fold-dim.gif) no-repeat 0px 0.3em; +} +ol.outline li.folded { + padding: 0 0 0 20px; + background: transparent url(../graphics/unfold-dim.gif) no-repeat 0px 0.3em; +} +ol.outline li.unfolded:hover { + padding: 0 0 0 20px; + background: transparent url(../graphics/fold.gif) no-repeat 0px 0.3em; +} +ol.outline li.folded:hover { + padding: 0 0 0 20px; + background: transparent url(../graphics/unfold.gif) no-repeat 0px 0.3em; +} + +ul.outline li.nofold { + padding: 0 0 0 52px; + background: transparent url(../graphics/bullet-nofold-dim.gif) no-repeat 5px 0.3em; +} +ul.outline li.unfolded { + padding: 0 0 0 52px; + background: transparent url(../graphics/bullet-fold-dim.gif) no-repeat 5px 0.3em; +} +ul.outline li.folded { + padding: 0 0 0 52px; + background: transparent url(../graphics/bullet-unfold-dim.gif) no-repeat 5px 0.3em; +} +ul.outline li.unfolded:hover { + padding: 0 0 0 52px; + background: transparent url(../graphics/bullet-fold.gif) no-repeat 5px 0.3em; +} +ul.outline li.folded:hover { + padding: 0 0 0 52px; + background: transparent url(../graphics/bullet-unfold.gif) no-repeat 5px 0.3em; +} + +li ul.outline li.nofold { + padding: 0 0 0 21px; + background: transparent url(../graphics/nofold-dim.gif) no-repeat 5px 0.3em; +} +li ul.outline li.unfolded { + padding: 0 0 0 21px; + background: transparent url(../graphics/fold-dim.gif) no-repeat 5px 0.3em; +} +li ul.outline li.folded { + padding: 0 0 0 21px; + background: transparent url(../graphics/unfold-dim.gif) no-repeat 5px 0.3em; +} +li ul.outline li.unfolded:hover { + padding: 0 0 0 21px; + background: transparent url(../graphics/fold.gif) no-repeat 5px 0.3em; +} +li ul.outline li.folded:hover { + padding: 0 0 0 21px; + background: transparent url(../graphics/unfold.gif) no-repeat 5px 0.3em; +} + +img { + image-rendering: optimize-quality; +} + +img.withBorder { + border: 2px solid #c60; + padding: 4px; +} + +div.header { + position: absolute; + z-index: 2; + left: 0; + right: 0; + top: 0; + bottom: auto; + height: 2.95em; + width: 100%; + padding: 0 0 0 0; + margin: 0 0 0 0; + border-width: 0; + border-style: solid; + background-color: #005A9C; + border-bottom-width: thick; + border-bottom-color: #95ABD0; +} + +div.footer { + position: absolute; + z-index: 80; + left: 0; + right: 0; + top: auto; + bottom: 0; + height: 3.5em; + margin: 0; + font-size: 80%; + font-weight: bold; + padding-left: 1em; + padding-right: 0; + padding-top: 0.3em; + padding-bottom: 0; + color: #003366; + background-color: #95ABD0; +} + +/* this is a hack to hide property from IE6 and below */ +div[class="footer"] { + position: fixed; +} + +#hidden-bullet { + visibility: hidden; + display: none; +} + +div.slide.cover { + color: white; + padding-top: 0; + padding-right: 0; +} + +div.slide.cover h1 { + margin-top:3em; + height: auto; +} + +div.slide.cover h2 { + color: white; +} + +div.slide.cover a { + color: white; +} + +div.slide.cover a:visited { color: white } +div.slide.cover a:link { color: white } +div.slide.cover a:hover { color: yellow; text-decoration: underline } +div.slide.cover a:active { color: yellow; text-decoration: underline } + +div.slide.cover a:hover, div.slide.cover a:active { + color: yellow; text-decoration: underline; +} + +div.slide.cover img.cover { + margin: 0 0 0 0; + float: right; + padding-bottom: 4em; + width: 50%; + overflow: hidden; +} + +#cover { + background-image: url("../graphics/banner.jpg"); + background-position: center center; + background-size: cover; + height: 18em; + text-align: center; + position: relative; + margin-top: 6.0em; +} + +div.slide.cover a:hover, div.slide.cover a:active { + color: yellow; text-decoration: underline; +} + +/* for Bert as an ardent user of the old W3C slidemaker tool */ + +div.comment { display: none; visibility: hidden } + +@media print { + div.slide h1 { background: transparent; color: black } + div.slide.cover { background: transparent; color: black } + div.slide.cover h1 { background: transparent; color: black } + div.comment { display: block; visibility: visible } +}