From 1213016d5e1d535237b28935ae1a859abb6bf307 Mon Sep 17 00:00:00 2001 From: Carlos Sosa Date: Thu, 19 Mar 2020 15:09:32 -0700 Subject: Add platicas and talks assets --- platicas/foss-vende/img/Lamp.jpg | Bin 0 -> 12916 bytes platicas/foss-vende/img/abuela.svg | 137 + platicas/foss-vende/img/africa.jpg | Bin 0 -> 169246 bytes platicas/foss-vende/img/alexandro.svg | 3656 +++++++++++++++++++++++ platicas/foss-vende/img/arduino.jpg | Bin 0 -> 70975 bytes platicas/foss-vende/img/arduinologo.png | Bin 0 -> 12061 bytes platicas/foss-vende/img/basico.svg | 1096 +++++++ platicas/foss-vende/img/blueprint.svg | 634 ++++ platicas/foss-vende/img/canoa.svg | 207 ++ platicas/foss-vende/img/code-problems.jpg | Bin 0 -> 85069 bytes platicas/foss-vende/img/corpo.svg | 69 + platicas/foss-vende/img/cpp.png | Bin 0 -> 13043 bytes platicas/foss-vende/img/db.gif | Bin 0 -> 5988 bytes platicas/foss-vende/img/diario.png | Bin 0 -> 354762 bytes platicas/foss-vende/img/foss-leaders.jpg | Bin 0 -> 37831 bytes platicas/foss-vende/img/foss-mexico.jpg | Bin 0 -> 211534 bytes platicas/foss-vende/img/freedo.png | Bin 0 -> 10171 bytes platicas/foss-vende/img/google.png | Bin 0 -> 6778 bytes platicas/foss-vende/img/gordito_capitalista.png | Bin 0 -> 6412 bytes platicas/foss-vende/img/hplogo.gif | Bin 0 -> 846 bytes platicas/foss-vende/img/ignanodon.svg | 21 + platicas/foss-vende/img/iwiks.png | Bin 0 -> 12587 bytes platicas/foss-vende/img/kiosko.png | Bin 0 -> 38238 bytes platicas/foss-vende/img/lamp.png | Bin 0 -> 65748 bytes platicas/foss-vende/img/logo.jpg | Bin 0 -> 96105 bytes platicas/foss-vende/img/machine.svg | 1643 ++++++++++ platicas/foss-vende/img/mexico-foss.svg | 64 + platicas/foss-vende/img/moda.svg | 55 + platicas/foss-vende/img/reforma.gif | Bin 0 -> 4993 bytes platicas/foss-vende/img/rusos.jpg | Bin 0 -> 39112 bytes platicas/foss-vende/img/screen.jpg | Bin 0 -> 62451 bytes platicas/foss-vende/img/spray.svg | 902 ++++++ platicas/foss-vende/img/unix_mascots.png | Bin 0 -> 131062 bytes platicas/foss-vende/img/yo.jpg | Bin 0 -> 48724 bytes platicas/foss-vende/index.html | 551 ++++ platicas/foss-vende/slidy.css | 400 +++ platicas/foss-vende/slidy.js | 2881 ++++++++++++++++++ platicas/foss-vende/w3c-black.css | 497 +++ platicas/index.html | 41 + platicas/taller-vim-1/img/Bill_joy.jpg | Bin 0 -> 37403 bytes platicas/taller-vim-1/img/Bram_Moo.jpg | Bin 0 -> 38287 bytes platicas/taller-vim-1/img/bonsai.jpg | Bin 0 -> 46754 bytes platicas/taller-vim-1/img/chibibonsa.jpg | Bin 0 -> 3595 bytes platicas/taller-vim-1/img/grafica.jpg | Bin 0 -> 33348 bytes platicas/taller-vim-1/img/grafica2.jpg | Bin 0 -> 78293 bytes platicas/taller-vim-1/img/iching.png | Bin 0 -> 6807 bytes platicas/taller-vim-1/img/me.jpg | Bin 0 -> 86280 bytes platicas/taller-vim-1/img/monje.jpg | Bin 0 -> 27452 bytes platicas/taller-vim-1/img/screen.jpg | Bin 0 -> 63017 bytes platicas/taller-vim-1/img/vim-editor_logo.png | Bin 0 -> 35765 bytes platicas/taller-vim-1/img/vim-fire.gif | Bin 0 -> 6884 bytes platicas/taller-vim-1/img/vim-screenshot1.png | Bin 0 -> 154662 bytes platicas/taller-vim-1/img/zen2.gif | Bin 0 -> 14096 bytes platicas/taller-vim-1/index.html | 812 +++++ platicas/taller-vim-1/slidy.css | 400 +++ platicas/taller-vim-1/slidy.js | 2881 ++++++++++++++++++ platicas/taller-vim-1/w3c-black.css | 497 +++ 57 files changed, 17444 insertions(+) create mode 100644 platicas/foss-vende/img/Lamp.jpg create mode 100644 platicas/foss-vende/img/abuela.svg create mode 100644 platicas/foss-vende/img/africa.jpg create mode 100644 platicas/foss-vende/img/alexandro.svg create mode 100644 platicas/foss-vende/img/arduino.jpg create mode 100644 platicas/foss-vende/img/arduinologo.png create mode 100644 platicas/foss-vende/img/basico.svg create mode 100644 platicas/foss-vende/img/blueprint.svg create mode 100644 platicas/foss-vende/img/canoa.svg create mode 100644 platicas/foss-vende/img/code-problems.jpg create mode 100644 platicas/foss-vende/img/corpo.svg create mode 100644 platicas/foss-vende/img/cpp.png create mode 100644 platicas/foss-vende/img/db.gif create mode 100644 platicas/foss-vende/img/diario.png create mode 100644 platicas/foss-vende/img/foss-leaders.jpg create mode 100644 platicas/foss-vende/img/foss-mexico.jpg create mode 100644 platicas/foss-vende/img/freedo.png create mode 100644 platicas/foss-vende/img/google.png create mode 100644 platicas/foss-vende/img/gordito_capitalista.png create mode 100644 platicas/foss-vende/img/hplogo.gif create mode 100644 platicas/foss-vende/img/ignanodon.svg create mode 100644 platicas/foss-vende/img/iwiks.png create mode 100755 platicas/foss-vende/img/kiosko.png create mode 100644 platicas/foss-vende/img/lamp.png create mode 100644 platicas/foss-vende/img/logo.jpg create mode 100644 platicas/foss-vende/img/machine.svg create mode 100644 platicas/foss-vende/img/mexico-foss.svg create mode 100644 platicas/foss-vende/img/moda.svg create mode 100644 platicas/foss-vende/img/reforma.gif create mode 100644 platicas/foss-vende/img/rusos.jpg create mode 100644 platicas/foss-vende/img/screen.jpg create mode 100644 platicas/foss-vende/img/spray.svg create mode 100644 platicas/foss-vende/img/unix_mascots.png create mode 100644 platicas/foss-vende/img/yo.jpg create mode 100644 platicas/foss-vende/index.html create mode 100644 platicas/foss-vende/slidy.css create mode 100644 platicas/foss-vende/slidy.js create mode 100644 platicas/foss-vende/w3c-black.css create mode 100644 platicas/index.html create mode 100755 platicas/taller-vim-1/img/Bill_joy.jpg create mode 100755 platicas/taller-vim-1/img/Bram_Moo.jpg create mode 100755 platicas/taller-vim-1/img/bonsai.jpg create mode 100755 platicas/taller-vim-1/img/chibibonsa.jpg create mode 100755 platicas/taller-vim-1/img/grafica.jpg create mode 100755 platicas/taller-vim-1/img/grafica2.jpg create mode 100755 platicas/taller-vim-1/img/iching.png create mode 100755 platicas/taller-vim-1/img/me.jpg create mode 100755 platicas/taller-vim-1/img/monje.jpg create mode 100755 platicas/taller-vim-1/img/screen.jpg create mode 100755 platicas/taller-vim-1/img/vim-editor_logo.png create mode 100755 platicas/taller-vim-1/img/vim-fire.gif create mode 100755 platicas/taller-vim-1/img/vim-screenshot1.png create mode 100755 platicas/taller-vim-1/img/zen2.gif create mode 100644 platicas/taller-vim-1/index.html create mode 100644 platicas/taller-vim-1/slidy.css create mode 100644 platicas/taller-vim-1/slidy.js create mode 100644 platicas/taller-vim-1/w3c-black.css (limited to 'platicas') diff --git a/platicas/foss-vende/img/Lamp.jpg b/platicas/foss-vende/img/Lamp.jpg new file mode 100644 index 0000000..f94ea07 Binary files /dev/null and b/platicas/foss-vende/img/Lamp.jpg differ diff --git a/platicas/foss-vende/img/abuela.svg b/platicas/foss-vende/img/abuela.svg new file mode 100644 index 0000000..12611e4 --- /dev/null +++ b/platicas/foss-vende/img/abuela.svg @@ -0,0 +1,137 @@ + + + + + + + + + diff --git a/platicas/foss-vende/img/africa.jpg b/platicas/foss-vende/img/africa.jpg new file mode 100644 index 0000000..c911852 Binary files /dev/null and b/platicas/foss-vende/img/africa.jpg differ diff --git a/platicas/foss-vende/img/alexandro.svg b/platicas/foss-vende/img/alexandro.svg new file mode 100644 index 0000000..3030b4d --- /dev/null +++ b/platicas/foss-vende/img/alexandro.svg @@ -0,0 +1,3656 @@ + + + + + + + + + + + +]> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + eJzUvXleG8uXJ/o2oD0IDGYWOQ/YzLPBgI3BYGNjAbKNGYQl8au6/Uev5a3lreyd7zmRozJTKaT7 +6equrls4FBnDiTMPEeMjR8dzqzfNq8acWdOqlfHx9Vaj3mm2FqrcWt29v39ud1pomvw4VdWpF3Va +3fUuVcfTRqt923xc4J9qBv24ha8n3zV/P1YP79uNx6nq5BQ1f7rt3Dfoh9X7xn/XH28arepN4ycN +0a52fjeqRxim/tiuPbVvpoJl0Lgb9Q59ZM8b5rzmVd0F3akevaff15rPjze3j7/Wmv9NU9tu1XD0 +qmXbVdvU6eed24+NdrpPzdR9Dx1rhqUZ1NuqOa7v0idazbV9j77baF4/PzQeO0et5nWj3V5v3jdb +7YXq2n39+q5C27Yvt27vG7TDh3qn6gMWq7u6cbn2fHt/c/D8cNWgrVumhWbzkr8+add/0Q74bzS7 +l7sP1HLc6HRoaTQ24Plxey0+IzXy/0x+/dj4dcvgJ1B8m1LDtppPD/XWHX2r+6balO+qTemebMry +LbUpfPOp8fB0T6BkUJiaU7Orpm/jv9HfqiftTwDmVS2tavtW1XXVhiLoNP5z2/ivhepB87EhYFlt +dY5v/xdt1NGNqusb0vrx+b7ROnm87cg+V3d9Acr75k3jnqYIv926rzMs+H/06L/S4VO99avRoRNt +3j93GNk8Tf1EQN+v/9PAIekyweFT4/FT85TXp9PuHN82q7Zh1QzTtqomAcXxCRtMv+rTH4bDk9la +1bXVtDpPrdaG0TBWMIlLp3VE53fYuv11+7igluhebrdub6IzdY2qJ//hXdS82P/6wf/KcmnnnU7j +US2fcGn9fQw3tNr7Y5px8/FmvfkA0LeB+4QUj4Qv981f8lv4N/9Cnz8/yer535d0Sket20eMWTng +X7zLo/tn+mm71Xx+2n382axMCrkf1Tu/CdsbjzdtIltpk39W5Qtq3b/9T0PaavXbp6nC8T616tc0 +bfXw6k/jukMfq4bor+Pn206j90DH1wBTq7rWem7/rn5qNu/D9SV/CpepmrkV/f9nzHHEHzwePgqk +u2dSHdIzEY38j5uFeufPQD/+Tx59vX5/f/urVX/6fXudNUHG7+FM8lsfkxGNtxrR9/zP4P+WQMt/ +Hq6a97fthwgbYy1H9Vbn9vq+cfxPu9N46D3aRuMnSa8Y2Lh18/E/jfvmU2yRYQvJ6urneuupaGgc +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 +J9WFSIr+eQ5vhzUJSxWruexsbRrvPZDwBBtIeHhihi2+nSkxGn9O/IUXY4f+c96sKaJaGfmmKGe9 +NsuXbBjfnt/uzt+edWqSfXU7uzDDvidz7M3mu6wYNGpGTg/2Au+L+g9+OlGenSV3KoTyN+IrLtH5 +0uJMsOQ9wSwQXC2D1uY33r1tasDkpX0tdK3ocXpZ++uI14RoYzrc35SwsMiT0vzfSxXX8+yqZ3tu +df7j832jddi6/XX7WJ2tvKnMr+7q+snjTXOr1Wh8avx3Z6N5/fzQeOxUF6rzq8fru7uevdG4bt40 +qnyZhP3DjVnF4nRQnhczL8LzBo+ArW389Lfvdl59XKxv/NTOl2IOG2b3U+bOIqI/HyvjIzNLd29H +pg6++COzv2/ppx8/ayMzzwvHI7PvzzZG5rT3BmNNbvzDXPNMz/niPHx5O/djq+l+NrWblHsQontp +8Wp19ung3cqe317ydt5+rm01v1inm62LLxpfxsmBEz677kjfvp8b0JINTX/bIrZKO/hzNjJ7+n2T +Fv/5bGRyrj6K/b3Df96MzK2aR7Tr199Hpm7vl0bmHj9cjMxc13zIqi5yaXRWPDb8Q8T6nmDe9bGH +CyHkicVzRZZrZ5csMeYU9wg9kYrEdkK3JuQgPGeN9h3cHTvTjKBInMGN8zt8+tywXgPG7tTCD2Nu +zbjHb8majChAu5mcXAh+WJiOkUYoT+mHFZol+smYWN5fCn7aqsV++Pb8fSX4YV+Lfkg5HJkg4jNv +r8xwZ5oF0IvPvb01F4GVAHhCNLy9P68Y0PahBj/tjDnmP5C6sn1iMKPSduodXw1wtD6DLrOK1o92 +58IEc0TYhVSO9mvciSY4I83p6KMGv4xO/7nBP89kWKKXx5qc39RYbSqQS7t8kjTLuv5GTXp+WFOz +MM6/aXyf+rn+29k6XLv3XnlZTlEZLM3SIq/q+cf5rPEq4y8f8USLUeXJ4sL66snrNz/Wf7t7T6uf +Vh8/MzUZa1+nv4eC6PrsNpS3ZoheP+Lne7U/Gx5YnRSp2gO1fWQmOItbv6bkr/roKStPAPkxe9dx +IdbaF3MH3PqcWX86KJ5MZKFv6GwDsl8oQfZM9KD9kOyJmU2Cu70DHzsC7e+MzE4tf8og+7G+pGTl +pXKyLynJIceXyMm+pCRfHPsSOdmXlJRATZecLIo6R7ix1pWJGCTyasnnvoKkhrHN73auPx9tc3Fv +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 + + + n+wWA2v2rGUEwCZswy44HIzdBB3m3ez311z+2FsrlKae23vQMljy/XyStG5vjwDrEckHbOaggtC7 +EDa8AAZsfezgIsR2oVVdvYRSBJz9ApYOGdYBJDFyCm21UiyZPR4NA+kePkN8CY3q3F+fXD6BLXvX +HkMNMDaplorN59KFU5aw9kABHBdAgykH8k39yqeiZHA5qf48m65hKdhMFUViVCjWcdkqjc7hlx/d +DQ2mLfd8xGUEqI7ueI4zeNoX9bLr5NezWdDie4b/crZdbBzT7riHoSmKkXgDCguPdCNlkjNMMmuM +Khi0NLisbXCeSausUMBXil+yHcb4B79MNTpa3vLDnCp974bNlZKJ+CsBHphGYEVFwZWlAZ5xff96 +Ms3aDNz3JXQKkDlWRsO8krqiQ1UcTEX1K8XocJhMUTHGVmJ/3HjA/YNY+Xm6wFW8Z1M/D6xFjCEL +ccBxjDha7icmWh4ffOWGZ78SEV2FBCUC/3q8C6Q0UjBE9gYsCXaEh1iKnE4l1DKO41AbIXjs6u5s +VbefmNeMdeI/9nWy1vDvvj3f/7t/9v1v/v233/3Lb7/5F//z+I//+o9/+7vf/7df//zP/zn+3f7j +v/z17/7+j7/8+U//9S/f/vEvv/75b//+xz98/x/wP/zxTxj9N7//83/5y/f/8sc//dMfv//xT//w +/f/5dn3/F6///5t/+vaP31TIuL7/29f//0+v/y/fL/7f3/y31z/+l9d//OfvUHP4p+/9+7/5/h/+ +z+v73+LIf/utwLKwsG+TVP4y1pex333737+Vx5VaFAPiL3Nslv2X+07/cf9+fxIGkL+fY2+/P5Bo ++i9zLLLbr7/f8SHSr3z/fh/9yxiO6sUr0vH7e+z/9/eP55O///Z88reO57PH/vrz2f/1/37/+z9o +FrxmhebAb37zv/3+7379P/78+7//v37987e/+8vv/+9fv//+j683//t/+PW/vv6X73/351//8g9/ ++vOv3//yn/70Txh5HRJ//pvf/Ov/9X/89v8BgOP8lw== + + + diff --git a/platicas/foss-vende/img/arduino.jpg b/platicas/foss-vende/img/arduino.jpg new file mode 100644 index 0000000..3b64130 Binary files /dev/null and b/platicas/foss-vende/img/arduino.jpg differ diff --git a/platicas/foss-vende/img/arduinologo.png b/platicas/foss-vende/img/arduinologo.png new file mode 100644 index 0000000..2603860 Binary files /dev/null and b/platicas/foss-vende/img/arduinologo.png differ diff --git a/platicas/foss-vende/img/basico.svg b/platicas/foss-vende/img/basico.svg new file mode 100644 index 0000000..3a0ff26 --- /dev/null +++ b/platicas/foss-vende/img/basico.svg @@ -0,0 +1,1096 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/platicas/foss-vende/img/blueprint.svg b/platicas/foss-vende/img/blueprint.svg new file mode 100644 index 0000000..aee688c --- /dev/null +++ b/platicas/foss-vende/img/blueprint.svg @@ -0,0 +1,634 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/platicas/foss-vende/img/canoa.svg b/platicas/foss-vende/img/canoa.svg new file mode 100644 index 0000000..83c5ecb --- /dev/null +++ b/platicas/foss-vende/img/canoa.svg @@ -0,0 +1,207 @@ + + + + + + + + + + +]> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/platicas/foss-vende/img/code-problems.jpg b/platicas/foss-vende/img/code-problems.jpg new file mode 100644 index 0000000..53214da Binary files /dev/null and b/platicas/foss-vende/img/code-problems.jpg differ diff --git a/platicas/foss-vende/img/corpo.svg b/platicas/foss-vende/img/corpo.svg new file mode 100644 index 0000000..b5771d9 --- /dev/null +++ b/platicas/foss-vende/img/corpo.svg @@ -0,0 +1,69 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/platicas/foss-vende/img/cpp.png b/platicas/foss-vende/img/cpp.png new file mode 100644 index 0000000..9947840 Binary files /dev/null and b/platicas/foss-vende/img/cpp.png differ diff --git a/platicas/foss-vende/img/db.gif b/platicas/foss-vende/img/db.gif new file mode 100644 index 0000000..1a60695 Binary files /dev/null and b/platicas/foss-vende/img/db.gif differ diff --git a/platicas/foss-vende/img/diario.png b/platicas/foss-vende/img/diario.png new file mode 100644 index 0000000..0f07bdc Binary files /dev/null and b/platicas/foss-vende/img/diario.png differ diff --git a/platicas/foss-vende/img/foss-leaders.jpg b/platicas/foss-vende/img/foss-leaders.jpg new file mode 100644 index 0000000..7742c4e Binary files /dev/null and b/platicas/foss-vende/img/foss-leaders.jpg differ diff --git a/platicas/foss-vende/img/foss-mexico.jpg b/platicas/foss-vende/img/foss-mexico.jpg new file mode 100644 index 0000000..fa13f21 Binary files /dev/null and b/platicas/foss-vende/img/foss-mexico.jpg differ diff --git a/platicas/foss-vende/img/freedo.png b/platicas/foss-vende/img/freedo.png new file mode 100644 index 0000000..21dfbff Binary files /dev/null and b/platicas/foss-vende/img/freedo.png differ diff --git a/platicas/foss-vende/img/google.png b/platicas/foss-vende/img/google.png new file mode 100644 index 0000000..0d6e4d4 Binary files /dev/null and b/platicas/foss-vende/img/google.png differ diff --git a/platicas/foss-vende/img/gordito_capitalista.png b/platicas/foss-vende/img/gordito_capitalista.png new file mode 100644 index 0000000..c2d2f36 Binary files /dev/null and b/platicas/foss-vende/img/gordito_capitalista.png differ diff --git a/platicas/foss-vende/img/hplogo.gif b/platicas/foss-vende/img/hplogo.gif new file mode 100644 index 0000000..1b80650 Binary files /dev/null and b/platicas/foss-vende/img/hplogo.gif differ diff --git a/platicas/foss-vende/img/ignanodon.svg b/platicas/foss-vende/img/ignanodon.svg new file mode 100644 index 0000000..907456b --- /dev/null +++ b/platicas/foss-vende/img/ignanodon.svg @@ -0,0 +1,21 @@ + + + + + + + + + + + + image/svg+xml + + + + + + + + + diff --git a/platicas/foss-vende/img/iwiks.png b/platicas/foss-vende/img/iwiks.png new file mode 100644 index 0000000..566e0c6 Binary files /dev/null and b/platicas/foss-vende/img/iwiks.png differ diff --git a/platicas/foss-vende/img/kiosko.png b/platicas/foss-vende/img/kiosko.png new file mode 100755 index 0000000..c92e699 Binary files /dev/null and b/platicas/foss-vende/img/kiosko.png differ diff --git a/platicas/foss-vende/img/lamp.png b/platicas/foss-vende/img/lamp.png new file mode 100644 index 0000000..e1caa35 Binary files /dev/null and b/platicas/foss-vende/img/lamp.png differ diff --git a/platicas/foss-vende/img/logo.jpg b/platicas/foss-vende/img/logo.jpg new file mode 100644 index 0000000..6a8a821 Binary files /dev/null and b/platicas/foss-vende/img/logo.jpg differ diff --git a/platicas/foss-vende/img/machine.svg b/platicas/foss-vende/img/machine.svg new file mode 100644 index 0000000..8c85040 --- /dev/null +++ b/platicas/foss-vende/img/machine.svg @@ -0,0 +1,1643 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/platicas/foss-vende/img/mexico-foss.svg b/platicas/foss-vende/img/mexico-foss.svg new file mode 100644 index 0000000..3e90380 --- /dev/null +++ b/platicas/foss-vende/img/mexico-foss.svg @@ -0,0 +1,64 @@ + + + + + + + + image/svg+xml + + + + + + + + + + + diff --git a/platicas/foss-vende/img/moda.svg b/platicas/foss-vende/img/moda.svg new file mode 100644 index 0000000..258c4dd --- /dev/null +++ b/platicas/foss-vende/img/moda.svg @@ -0,0 +1,55 @@ + + + + + + + image/svg+xml + + + + + + + + diff --git a/platicas/foss-vende/img/reforma.gif b/platicas/foss-vende/img/reforma.gif new file mode 100644 index 0000000..892f83a Binary files /dev/null and b/platicas/foss-vende/img/reforma.gif differ diff --git a/platicas/foss-vende/img/rusos.jpg b/platicas/foss-vende/img/rusos.jpg new file mode 100644 index 0000000..df85853 Binary files /dev/null and b/platicas/foss-vende/img/rusos.jpg differ diff --git a/platicas/foss-vende/img/screen.jpg b/platicas/foss-vende/img/screen.jpg new file mode 100644 index 0000000..1452a34 Binary files /dev/null and b/platicas/foss-vende/img/screen.jpg differ diff --git a/platicas/foss-vende/img/spray.svg b/platicas/foss-vende/img/spray.svg new file mode 100644 index 0000000..a1b5796 --- /dev/null +++ b/platicas/foss-vende/img/spray.svg @@ -0,0 +1,902 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/platicas/foss-vende/img/unix_mascots.png b/platicas/foss-vende/img/unix_mascots.png new file mode 100644 index 0000000..8ab91c6 Binary files /dev/null and b/platicas/foss-vende/img/unix_mascots.png differ diff --git a/platicas/foss-vende/img/yo.jpg b/platicas/foss-vende/img/yo.jpg new file mode 100644 index 0000000..7074aac Binary files /dev/null and b/platicas/foss-vende/img/yo.jpg differ diff --git a/platicas/foss-vende/index.html b/platicas/foss-vende/index.html new file mode 100644 index 0000000..eacd65d --- /dev/null +++ b/platicas/foss-vende/index.html @@ -0,0 +1,551 @@ + + + + +FOSS que vende + + + + + + + +
head-icon +

FOSS que vende

+
+

+

FOSS que vende

++"Gordito +

Carlos Sosa
+gnusosa@gnusosa.net

+
+
+

Índice

+
+ +
+
+

Índice

+
+
+
+
    +
  • Básico +
      +
    • Inglés
    • +
    • Aprender a programar C/C++
    • +
    • PPP
    • +
    • LAMP
    • +
    • ¿A qué le quieres tirar?
      +(¡Decidirse!)
    • +
    • Portafolio de Código = {Github, Contribuciones a FOSS, ser + parte de la comunidad}
      + (Una cuenta de Facebook consigue citas, una de Github + ¡trabajo!)
    • +
    • Hazte de amigos en todos los ámbitos
      + (No todos pueden hacer lo que tú haces)
    • +
    +
  • +
+
+
+
+

Índice

+
+
+
+ +
    +
  • FOSS que vende en México +
      +
    • LAMP
    • +
    • PHP
    • +
    • Web Dev
    • +
    • .NET/Mono
    • +
    • Sysadmin
    • +
    +
  • +
+
+
+
+

Índice

+
+
+
+ +
    +
  • FOSS de moda +
      +
    • RUBY y ROR
    • +
    • Django
    • +
    • Scala
    • +
    • CouchDB vs MongoDB
    • +
    • Arduino
    • +
    • Javascript: ¡Volvió para quedarse!
    • +
    • Ubuntu
    • +
    +
  • +
+
+
+
+

Índice

+
+
+
+ +
    +
  • FOSS anciano y que se esta retirando +
      +
    • PHP4 Y los malos hábitos de PHP5
    • +
    • MySQL (No me corran del grupo es la realidad)
    • +
    • Java (Gracias a Dios)
    • +
    • RHEL (Sin Comentarios)
    • +
    • Solaris/OpenSolaris (Ni modo Oracle)
    • +
    • Linux Kernel 2.4 (Nadie escribe drivers para siempre)
    • +
    +
  • +
+
+
+

+

OH HAI!

+
+
+

La plática sera basada en mi experiencia.
+ No me corran del grupo después de la platica. KTHX. BAI

+
+

+

1337 h4x0r

+
+
+

ANTES
+ Lo que solía hacer y todavía hago.

+
+

+

1337 h4x0r

+
+
+

PERSIGUIENDO LA CHULETA
+ Super aburrido mi escritorio.

+
+

+

SOY BIEN WEB 2.0

+
+
+

LO QUE HAGO AHORA
+ Super divertido colaborar con los clientes.

+
+
+

Filosofía

+
+
+ + +

¿Por qué vende?

+
    +
  • 1. FOSS es libre +
      +
    • No hay necesidad de actualizar licencias en librerías, + programas o compiladores.
    • +
    • No hay contratos de distribución que tengan que pasar a + terceros, por ejemplo, abogados.
    • +
    • Reconoce al autor del software, el proyecto y la idea.
    • +
    +
  • +
+
+
+
+

Filosofía

+
+ +

¿Por qué vende?

+
+
+
    +
  • 2. No existe deadline pesada +
      +
    • Soporte en cuestión de minutos u horas.
    • +
    • Un código fuente abierto acelera la búsqueda de errores en el + software.
    • +
    • La experiencia de otros usuarios es la mayor documentación en + el medio.
    • +
    +
  • +
+
+
+
+

Filosofía

+
+ +

¿Por qué vende?

+
+ +
    +
  • 3. FOSS = producto de calidad. +
      +
    • "El monstruo de más de mil ojos" a tu disposición.
    • +
    • Los errores se repiten, las soluciones también.
    • +
    • Si todo falla, tienes herramientas para trabajar el error.
    • +
    +
  • +
+
+
+
+

Filosofía

+
+ +

¿Por qué vende?

+
+
+
    +
  • 4. ¡FOSS nunca muere! +
      +
    • Un proyecto de FOSS nunca desaparece, evoluciona.
    • +
    • Cuando un proyecto es bueno, sus desarrolladores desaparecen, + sus usuarios no.
    • +
    • Un proyecto en FOSS puede ser retomado por cualquiera que tenga + las ganas de trabajar.
    • +
    +
  • +
+
+
+

+

¿Quién lo usa?

+
tipico-ñoño-unix
+
+
+

Filosofía

+
+ +

¿Quién lo usa?

+
+ +
    +
  • +
      +
    • google-logo
    • +
    • hplogo
    • +
    • reforma
    • +
    • iwiks
    • +

    • + Es broma. :P
    • +
    +
  • +
+
+
+

+

¿Quién lo usa?
+
+ Rusia

+
+
+

Comunismo en su máxima expresión
+ ¡Trotsky vive!

+
+

+

¿Quién lo usa?
+
+ África

+
+
+
+
+

Campos

+
+
DBA
+

Sysadmin

+
+ +
    +
  • Todos usamos bases de datos.
    +(y servidores) +
      +
    • Escalabilidad
    • +
    • Redes
    • +
    • DBA
    • +
    • UNIX en General
    • +
    +
  • +
+
+
+
+

Campos

+
+ +

Web

+
+
+
    +
  • Donde todos somos spiderman.
    +
      +
    • Diseño Web
    • +
    • Web developers
    • +
    +
  • +
+
+
+
+

Campos

+
+ +

Web

+
+
+
    +
  • Los trabajos que más pagan. +
  • +
  • Django, Ruby, Perl, Python para Web.
    +
      +
    • Web Engineers
    • +
    • Web Scalability
    • +
    +
  • +
+
+
+
+

Campos

+
+ +

Corporativo

+
+
+
    +
  • Sin comentarios.
    +(Estos pagan bien, pero cuesta llegar a ellos) +
      +
    • GUI
    • +
    • Productos de Oficina
    • +
    • Java
    • +
    • Logística
    • +
    +
  • +
+
+
+
+

Campos

+
+ +

Móviles

+
+
+
    +
  • El Futuro.
    +(Hay que enseñar a los chamacos a programar en Mono) +
      +
    • UIX
    • +
    • Cross-Plataform
    • +
    • Apps
    • +
    +
  • +
+
+
+
+

Campos

+
+
arduino-logo
+

Especializados

+
+ +
    +
  • (El salario de los del campo del Web)^10.
    +(Mucho cálculo y física) +
      +
    • Arduino
    • +
    • Bio & Ciencia
    • +
    • Robótica
    • +
    +
  • +
+
+
+

+

Arduino

+
+"arduino-board"
+

Partíendole en su madre
+a la industria de circuitos desde el 2005.

+
+

+

PAUSA

+
NOTA ANTES DE CONTINUAR...
+
+
+

Básico

+
+ +

Inglés

+
+ +
    +
  • Todo proyecto de software y trabajo...
    +REQUIERE INGLÉS!!! +
      +
    • +

      Es más importante que este bien escrito.

      +
    • +
    • +

      A los extranjeros no les importa el acento,
      +con que te comuniques.

      +
    • +
    • +

      ¿Cuál es el pinche pedo con el español?

      +
    • +
    +
  • +
+
+
+

+

MUY IMPORTANTE

+
+

RTFM!!!

+

Read The +Fucking Manual

+

Lee el puto manual

+
+
+
+

Básico

+
+
C fue creado por Dios.
+

Aprender a programar C/C++

+
+ +
    +
  • Los dioses de la lógica computacional...
    +
      +
    • +

      C da estilo y enseña flujo.

      +
    • +
    • +

      C++ es el padre de todos los lenguajes de alto nivel.

      +
    • +
    • +

      ¡Es una mentira que Java es esencial!

      +
    • +
    +
  • +
+
+
+

+

PPP

+
+

ppp

+

perl python +php

+

sorry ruby fans...

+
+
+

+

LAMP

+
+"LAMP"
+

Linux Apache +Mysql PPP

+
+

+

LAMP

+
+"lamp"
+

Linux Apache +Mysql PPP

+
+

+

A considerar...

+
mascotas-unix
+

Toda gran compañía utiliza algún derivado de Unix

+simón +

por Unix, me refiero a la terminal y las utilidades GNU.

+Puro texto FTW!
+
+

Básico

+
+ +

Comunidad

+
+
+
    +
  • Portafolio de Código...
    +
      +
    • Github
    • +
    • Contribuciones a FOSS
    • +
    • Hazte de amigos
    • +
    +

    No todos pueden hacer lo que tú haces.

    +

    *Una cuenta de Facebook consigue citas, una de +Github ¡trabajo!*

    +
  • +
+
+
+

+

FOSS que vende en México

+
+

Ahí en su tiempo libre entre Doritos y Caguamás... que diga +Sodas. :B

+
+

+

FOSS que vende

+
+

Gracias por su tiempo, espero todavía me acepten en el +grupo.

+Carlos Ivan Sosa +

gnusosa

+

Cuenta de github

+

log.gnusosa.net

+

¡Googlealo apá!

+
+
+ + diff --git a/platicas/foss-vende/slidy.css b/platicas/foss-vende/slidy.css new file mode 100644 index 0000000..9cb2fab --- /dev/null +++ b/platicas/foss-vende/slidy.css @@ -0,0 +1,400 @@ +/* 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%; +} + +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; +} + +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/platicas/foss-vende/slidy.js b/platicas/foss-vende/slidy.js new file mode 100644 index 0000000..c4e346d --- /dev/null +++ b/platicas/foss-vende/slidy.js @@ -0,0 +1,2881 @@ +/* slidy.js + + 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 + + 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), + 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), + keyboardless: (this.ipad || this.iphone), + + // 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; + + // 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, "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 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.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; + }, + + + // ### 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 = "Tap footer to move to next slide"; + else + p1.innerHTML = "Space or Right Arrow 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 + (node.nodeName == "H1" || + node.nodeName == "h1" || + node.nodeName == "DIV" || + node.nodeName == "div")) + 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 + 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 (w3c_slidy.ie && !w3c_slidy.ie8) + 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; + }, + + // right mouse button click is reserved for context menus + // it is more reliable to detect rightclick than leftclick + mouse_button_click: function (e) { + 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 (e) { + var tag = e.nodeName.toLowerCase(); + + return e.onkeydown || + e.onclick || + tag == "a" || + tag == "embed" || + tag == "object" || + tag == "video" || + tag == "audio" || + 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/platicas/foss-vende/w3c-black.css b/platicas/foss-vende/w3c-black.css new file mode 100644 index 0000000..4e1a45d --- /dev/null +++ b/platicas/foss-vende/w3c-black.css @@ -0,0 +1,497 @@ +/* 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: "Gill Sans MT", "Gill Sans", GillSans, 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: 4.1em; + padding: 0 0 0 0.2em; + margin: 0 0 0 0; + border-width: 0; + background-color: white; +} + +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-left: 3em; + padding-right: 3em; + padding-top: 0.1em; + margin-bottom: 0.8em; + margin-top: -0.05em; + margin-left: 0; + margin-right: 0; + min-height: 2.3em; + color: black; + height: 2.2em; + font-size: 160%; + line-height: 1.1em; +} + +div.slide h1 a { + color: black; + text-decoration: none; +} + +div.slide h1 a:link { + color: black; + text-decoration: none; +} + +div.slide h1 a:visited { + color: black; + text-decoration: none; +} + +div.slide h1 a:hover { + color: black; + text-decoration: underline; +} + +div.slide h1 a:active { + color: red; + text-decoration: underline; +} + +#head-icon { + margin-top: 0.5em; + margin-bottom: 0; + margin-left: 0; + margin-right: 1em; + background: white; + border-width: 0; + height: 3em; + max-width: 3em; + z-index: 2; + float: left; +} + +#head-logo { + margin: 0; + margin-top: 0.25em; + padding-top: 0.25em; + padding-bottom: 0.2em; + padding-left: 0; + padding-right: 0; + height: 3.2em; + width: 4.8em; + float: right; + z-index: 2; + background: white; +} + +.head-logo-fallback { + margin: 0; + padding: 0; + 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: 1em; + 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.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: black; + background-color: white; + padding-top: 0; + padding-right: 0; + padding-left: 3em; + height: 100%; +} + +div.slide.cover h1 { + margin: 0; + padding: 0.5em; + color: black; + height: auto; +} + +div.slide.cover h2 { + color: black; +} + +div.slide.cover a { + color: black; +} + +div.slide.cover a:visited { color: black} +div.slide.cover a:link { color: black} +div.slide.cover a:hover { color: red; text-decoration: underline } +div.slide.cover a:active { color: red; text-decoration: underline } + +div.slide.cover a:hover, div.slide.cover a:active { + color: red; text-decoration: underline; +} + +div.slide.cover img.cover { + margin: 0 0 0 0; + float: right; + padding-bottom: 4em; + overflow: hidden; +} + +div.slide.cover img.gordito{ + margin-right: 40%; + float: right; + padding-bottom: 4em; + overflow: hidden; +} + +div.slide.cover a:hover, div.slide.cover a:active { + color: red; 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 } +} diff --git a/platicas/index.html b/platicas/index.html new file mode 100644 index 0000000..7cca5b5 --- /dev/null +++ b/platicas/index.html @@ -0,0 +1,41 @@ + + + + gnusosa - Carlos Ivan Sosa + + + + + + + +
+
+
+
+

+ gnusosa +

+
+

+ Platicas y Talleres +

+

Estas son las platicas y talleres que he impartido en español para la comunidad.

+

Taller de Vim #1 - Impartido en la 6ta Sesión del grupo #mxlOS. +
+ Filosofía y uso básico de Vim. +

+

FOSS que vende - Presentada en la 5ta Sesión del grupo #mxlOS. +
+ Platica sobre las carreras, habilidades y software que mas vende dentro del ámbito del FOSS. +

+
+
+
+
+
+
+
+ + diff --git a/platicas/taller-vim-1/img/Bill_joy.jpg b/platicas/taller-vim-1/img/Bill_joy.jpg new file mode 100755 index 0000000..f854085 Binary files /dev/null and b/platicas/taller-vim-1/img/Bill_joy.jpg differ diff --git a/platicas/taller-vim-1/img/Bram_Moo.jpg b/platicas/taller-vim-1/img/Bram_Moo.jpg new file mode 100755 index 0000000..f400779 Binary files /dev/null and b/platicas/taller-vim-1/img/Bram_Moo.jpg differ diff --git a/platicas/taller-vim-1/img/bonsai.jpg b/platicas/taller-vim-1/img/bonsai.jpg new file mode 100755 index 0000000..fa26f18 Binary files /dev/null and b/platicas/taller-vim-1/img/bonsai.jpg differ diff --git a/platicas/taller-vim-1/img/chibibonsa.jpg b/platicas/taller-vim-1/img/chibibonsa.jpg new file mode 100755 index 0000000..bd5595a Binary files /dev/null and b/platicas/taller-vim-1/img/chibibonsa.jpg differ diff --git a/platicas/taller-vim-1/img/grafica.jpg b/platicas/taller-vim-1/img/grafica.jpg new file mode 100755 index 0000000..c8c0c49 Binary files /dev/null and b/platicas/taller-vim-1/img/grafica.jpg differ diff --git a/platicas/taller-vim-1/img/grafica2.jpg b/platicas/taller-vim-1/img/grafica2.jpg new file mode 100755 index 0000000..33db640 Binary files /dev/null and b/platicas/taller-vim-1/img/grafica2.jpg differ diff --git a/platicas/taller-vim-1/img/iching.png b/platicas/taller-vim-1/img/iching.png new file mode 100755 index 0000000..3cfcacf Binary files /dev/null and b/platicas/taller-vim-1/img/iching.png differ diff --git a/platicas/taller-vim-1/img/me.jpg b/platicas/taller-vim-1/img/me.jpg new file mode 100755 index 0000000..ca4bd88 Binary files /dev/null and b/platicas/taller-vim-1/img/me.jpg differ diff --git a/platicas/taller-vim-1/img/monje.jpg b/platicas/taller-vim-1/img/monje.jpg new file mode 100755 index 0000000..70937e2 Binary files /dev/null and b/platicas/taller-vim-1/img/monje.jpg differ diff --git a/platicas/taller-vim-1/img/screen.jpg b/platicas/taller-vim-1/img/screen.jpg new file mode 100755 index 0000000..7b2b31f Binary files /dev/null and b/platicas/taller-vim-1/img/screen.jpg differ diff --git a/platicas/taller-vim-1/img/vim-editor_logo.png b/platicas/taller-vim-1/img/vim-editor_logo.png new file mode 100755 index 0000000..6dc29b3 Binary files /dev/null and b/platicas/taller-vim-1/img/vim-editor_logo.png differ diff --git a/platicas/taller-vim-1/img/vim-fire.gif b/platicas/taller-vim-1/img/vim-fire.gif new file mode 100755 index 0000000..ab04a01 Binary files /dev/null and b/platicas/taller-vim-1/img/vim-fire.gif differ diff --git a/platicas/taller-vim-1/img/vim-screenshot1.png b/platicas/taller-vim-1/img/vim-screenshot1.png new file mode 100755 index 0000000..6eb814b Binary files /dev/null and b/platicas/taller-vim-1/img/vim-screenshot1.png differ diff --git a/platicas/taller-vim-1/img/zen2.gif b/platicas/taller-vim-1/img/zen2.gif new file mode 100755 index 0000000..8c5a83d Binary files /dev/null and b/platicas/taller-vim-1/img/zen2.gif differ diff --git a/platicas/taller-vim-1/index.html b/platicas/taller-vim-1/index.html new file mode 100644 index 0000000..e7ebd43 --- /dev/null +++ b/platicas/taller-vim-1/index.html @@ -0,0 +1,812 @@ + + + Usando Vim + + + + + + + + +
+head-icon +

Usando Vim

+
+
+vim-fuego +

Usando Vim

+
+
+
+

Usando Vim

+ +

Carlos Sosa
+gnusosa@gnusosa.net

+
+
+

Índice

+
+
+
bonsai
+
    + +
  • Introducción +
      +
    • ¿Qué es Vim?
    • +
    • Vim no es.
    • +
    • Historia.
    • +
    • Vim ne Vi
    • +
    • ¿Cómo se usa? (¿Con que se come?)
    • +
    • Modular = Modos
    • +
    +
  • +
+
+
+
+

Índice

+
+
+
monje
+
    + +
  • Filosofía +
      +
    • Una pizca de KISS.
    • +
    • Virtudes del Programador.
    • +
    • Se trata de editar, no de escribir.
    • +
    • Los siete hábitos para editar texto efectivamente.
    • +
    +
  • +
+
+
+
+

Índice

+
+
+
zen2
+
    + +
  • Zen de Vim +
      +
    • Controla tú energía. (linea de comandos)
    • +
    • No gastes tú energía moviéndote. (modo de comandos)
    • +
    • No corras por los campos, sáltalos. (modo de comandos avanzado)
    • +
    • Reduce, Recicla, Reusa. (modo visual)
    • +
    • Solo escribe lo esencial. (modo inserción)
    • +
    • El que se repite, pierde. (dot y macros)
    • +
    • Hasta el texto más correcto, tiene formato. (Editar código)
    • +
    +
  • +
+
+
+
+

Índice

+
+
+
img/iching.png
+
    + +
  • Siete hábitos para editar texto efectivamente +
      +
    • Muévete rápido.
    • +
    • No lo escribas dos veces.
    • +
    • Corregir.
    • +
    • Es raro cuando un archivo es solitario.
    • +
    • La unión hace la fuerza.
    • +
    • Todo texto es estructurado.
    • +
    • La práctica hace al maestro.
    • +
    +
  • +
+
+
+
+
+

OH HAI!

+
+ Me +
+

Uso Vim todos los días.
+ No puedo vivir sin Vim. KTHX. BAI

+
+
+
+

Trabajo

+
+ Escritorio +
+

La vida es sufrimiento.

+
+
+
+

I < Graficas

+
+ grafica +
+

LO QUE HAGO AHORA
+ Super aburrido comparado a Facebook.

+
+
+
+

I < Graficas

+
+ grafica +
+

LO QUE HAGO AHORA
+ Super aburrido comparado a Facebook.

+
+
+

Introducción

+
+
+ +
vim-screenshot
+

¿Qué es?

+
    + +
  • Vim es un editor de texto modular.
    Un clon más del famoso editor vi.

    Principales funcionalidades: +
      +
    • Corrector ortográfico integrado.
    • +
    • Autocompletado de texto.
    • +
    • Órdenes deshacer y rehacer.
    • +
    • Navegación por pestañas.
    • +
    • Ventanas múltiples. Área de edición horizontal o vertical.
    • +
    • Resaltado de sintaxis o de etiquetas.
    • +
    • Lenguaje de scripting para programar extensiones.
    • +
    +
  • +
+
+
+
+

Introducción

+
+
+ +
vim-screen
+

Vim no es:

+
    + +
  • Vim es un editor de texto, NO es un IDE. +
      +
    • No es gráfico. Lo siento, terminal o gvim.
    • +
    • No es un formateador de texto.
    • +
    • No es un WYSIWYG.
    • +
    • No es para todos.
    • +
    • Vim script es para usarse con texto.
    • +
    • No es Emacs.
    • +
    +
  • +
+
+
+
+
+

PERO...

+
+

Puede ser usado para todo lo anterior.

+
+

El Vim script language permite la creación de plugins.
+ De tal manera, que solo utilices lo necesario.

+
+
+

Introducción

+
+
+
BramMoo-vim
+

Historia

+
    + +
  • Bram Moolenaar, presentó la primera versión en 1991. +
      +
    • Vim fue escrito primero para la Amiga.
    • +
    • Vim existe desde la época de USENET.
    • +
    • Vim comenzó con una comunidad fuerte.
    • +
    • Vim surgió por que Vi en ese tiempo era de fuente licencia/cerrada.
    • +
    +
  • +
+
+
+
+

Introducción

+
+
+
Billjoy-vi
+

Historia

+
    + +
  • Bill Joy, escribió Vi uniendo ed y ex. +
      +
    • Aprendió a leer cuando sólo tenía 3 años.
    • +
    • Es uno de alumnos prodigios de UC Berkeley.
    • +
    • Fue el principal diseñador del Unix de Berkeley (BSD).
    • +
    • Escribió las bases de los sistemas BSD's.
    • +
    • Fue parte de los inicios de SunOS, ahora Solaris.
    • +
    • Es uno de los pilares de Sun Microsystems.
    • +
    +
  • +
+
+
+
+
+ +
+

Vim ne Vi

+

ne eq "not equal"
+ eq === "equal"

+
+
+
+

Introducción

+
+
+

¿Cómo se usa?

+
    + +
  • ¿Con que se come? +
      +
    • Vim es modular.
    • +
    • Dependiendo el modo, es la interpretación.
    • +
    • Cada tecla es un comando o acción.
    • +
    • Vim no se equivoca, nosotros nos equivocamos.
    • +
    • Vim maneja texto, no archivos.
    • +
    +
  • +
+
+
+
+

Filosofía

+
+
+

Una pizca de Unix.

+
    + +
  • Keep It Simple Stupid +
      +
    • En Unix todo es un archivo de texto.
    • +
    • El minimalismo es bello.
    • +
    • Escribe programas para manejar solo texto.
    • +
    • Escoja portabilidad sobre eficiencia.
    • +
    • Guarda todo archivo en texto.
    • +
    +
  • +
+
+
+
+

Filosofía

+
+
+

Virtudes del Programador.

+
    + +
  • 1. Pereza +
      +
    • Automatizar procesos repetitivos.
    • +
    • Enfocarse en problemas más complejos e interesantes.
    • +
    • Que la maquina trabaje por ti, ¡ella es la computadora!
    • +
    • Computadora = Computo.
    • +
    +
  • +
+
+
+
+

Filosofía

+
+
+

Virtudes del Programador.

+
    + +
  • 2. Impaciencia +
      +
    • Resolver un problema lo más pronto posible.
    • +
    • No dejar un trabajo para después.
    • +
    • Resolver ahora, para relajarse mañana. :D
    • +
    +
  • +
+
+
+
+

Filosofía

+
+
+

Virtudes del Programador.

+
    + +
  • 3. Orgullo +
      +
    • El tratar de realizar una buena implementación.
    • +
    • Código bien escrito con pocas lineas, siempre es aclamado.
    • +
    • Buen código tiene consecuencias: Respeto, oportunidades y futuro.
    • +
    +
  • +
+
+
+
+

Filosofía

+
+
+

Se trata de editar, no de escribir.

+
    + +
  • No escribir, es bueno. (Pereza)
  • +
  • El uso del modo inserción, es del diablo. (Pereza)
  • +
+
+
+
+

Zen de Vim

+
+
+

Controla tú energía.

+
    + +
  • Linea de comandos. Presiona la tecla ' : ' +
      +
    • :e archivo - editar archivo (abrir)
    • +
    • :q - quit - cerrar
    • +
    • :w - write - escribir. (guardar)
    • +
    • :r - read - leer. (insertar un texto)
    • +
    • !date - Corre una aplicación externa a Vim por sh.
    • +
    +
  • +
+
+
+
+

Zen de Vim

+
+
+

No gastes tú energía moviéndote.

+
    + +
  • Modo de comandos. +
      +
    • Usa h,j,k,l.
    • +
    • izquierda,abajo,arriba,derecha.
    • +
    +
  • +
+
+
+
+

Zen de Vim

+
+
+

No gastes tú energía moviéndote.

+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
fxforward - Mueve el cursor al siguiente caracter que sea x
txLa misma acción que la anterior, pero el cursor se mueve al siguiente caracter despues de x
FxAcción inversa a fx.
wMueve el cursor hacia adelante de palabra en palabra.
bAcción inversa de w.
0Mueve el cursor al inicio de la linea actual.
^Mueve el cursor al primer caracter de la actual linea.
$Mueve el cursor al ultimo caracter de la linea.
+
+
+
+
+

Zen de Vim

+
+
+

No corras por los campos, sáltalos.

+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
)Mueve el cursor a la siguiente oración.
(Acción inversa de ).
<C-F>Mueve el cursor una ventana entera hacia adelante.
<C-B>Acción inversa de C-F.
ggMueve el cursor al inicio del archivo.
GMueve el cursor al final del archivo.
numGMueve el cursor a la linea num.
+
+
+
+
+

Zen de Vim

+
+
+

No corras por los campos, sáltalos.

+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
HMueve el cursor al tope de la ventana.
MMueve el cursor a la mitad de la ventana.
LAcción inversa de H.
*Lee la palabra de bajo del cursor y busca hacia adelante la palabra seleccionada.
#Acción inversa de *.
/palabraEmpezando del cursor busca hacia adelante la palabra despues de '/'.
?palabraAcción inversa a '/'.
+
+
+
+
+

Zen de Vim

+
+
+

No corras por los campos, sáltalos.

+
+ + + + + + + + + + + + + + +
maCrea una marca en la navegación del archivo, donde 'a' es la marca.
`aMueve el cursor a la marca 'a' en el archivo.
`.Ir a la ultima modificación hecha.
+
+
+
+
+

Zen de Vim

+
+

Reduce, Recicla, Reusa.

+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
vSubraya por caracteres.
VSubraya por lineas.
<C-V>Subraya por bloques de lineas.
d{acción}delete. Borra(corta) el texto subrayado y lo manda al clipboard.
ddBorra(corta) la linea entera y la manda al clipboard.
yyank. Copy(copiar). Acción similar a d, pero este nomas copia al clipboard.
ccut. Acción similar a d, pero este te manda a modo insertar.
ppaste. Pegar. Pega lo que hay en clipboard.
+
+
+
+
+

Zen de Vim

+
+
+

Solo escribe lo esencial.

+
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
iInserta texto antes de el caracter debajo del cursor.
IInserta texto al inicio de la linea.
aAcción inversa de i.
AAcción inversa de I.
oCrea una nueva linea debajo de la linea actual,
y empieza modo insertar.
OAcción inversa que o.
+
+
+
+
+

Zen de Vim

+
+
+

El que se repite, pierde.

+
+ + + + + + + + + + + + + + + + + + +
qregistroEmpieza a grabar un macro con el nombre de registro.
qTermina la grabación del macro.
@registroActiva el macro registro.
.Dot. Repite la ultima acción.
+
+
+
+
+

Zen de Vim

+
+
+

Hasta el más limpio tiene formato.

+
+ + + + + + + + + + + + + + + + + + +
]pPre-formatea el texto que se va a pegar.
%Si el cursor se coloca en {,[,(, busca al siguiente del mismo.
>>Le da formato a bloques de texto.
<<Acción inversa de <<.
+
+
+
+
+

Siete hábitos para editar
texto efectivamente.

+
+
+

Muévete rápido.

+
    + +
  • Navegar por el texto es el habito más común.
    + Aprende a navegar, moverte y saltar, sin presionar tantas teclas. +
      +
    • Usa /patrón para buscar una palabra clave.
    • +
    • Usa % para moverte entre bloques lógica.
    • +
    • Para variables y palabras que se repitan, usa *.
    • +
    • Usa ngg donde n es el numero de linea.
    • +
    +
  • +
+
+
+ +
+
+

No lo escribas dos veces.

+

Tres simples pasos:

+
+
    +
  • 1. Mientras editas un archivo, dedícale tiempo a notar cuantas veces repites los mismos movimientos.
  • +
  • 2. Busca un comando, una forma o un plugin para el editor que remedie esa repetición.
  • +
  • 3. Practica utilizando ese comando hasta que lo hagas por inercia propia.
  • +
+
+
+
+

Siete hábitos para editar
texto efectivamente.

+
+

No lo escribas dos veces.

+
    + +
  • Escribir dos veces lo mismo, es como reinventar la rueda.
    +
      +
    • Usa :s para substituir una palabra clave en todo el archivo.
    • +
    • Usa . para insertar una palabra que acabas de escribir.
    • +
    • Para variables y palabras que se repitan, usa C-N.
    • +
    • Para directorios y archivos, usa C-X + C-F.
    • +
    +
  • +
+
+
+
+

Siete hábitos para editar
texto efectivamente.

+
+

Corregir.

+
    + +
  • Si una palabra errónea se repite, debe ser corregida.
    +
      +
    • Usa :abbr Lunix Linux para corregir una palabra clave en todo el archivo.
    • +
    +
  • +
+
+
+
+

Siete hábitos para editar
texto efectivamente.

+
+

Es raro cuando un archivo es solitario.

+
    + +
  • Todo archivo tiene otros archivos en común.
    + Edita con varias ventanas y alcanzaras tus metas. +
      +
    • Usa C-w + s para dividir la ventana horizontalmente.
    • +
    • Usa C-w + v para dividir la ventana verticalmente.
    • +
    +
  • +
+
+
+
+

Siete hábitos para editar
texto efectivamente.

+
+

La unión hace la fuerza.

+
    + +
  • Vim se maneja con la filosofía Unix,
    + utiliza ese flujo de texto. +
      +
    • Usa :r archivo para insertar un texto entero al archivo.
    • +
    • Usa :r ! grep 192.168.1.102 log para insertar texto de un flujo de texto externo.
    • +
    +
  • +
+
+
+
+

Siete hábitos para editar
texto efectivamente.

+
+

Todo texto es estructurado.

+
    + +
  • En la programación y en los textos formales,
    + el orden y el formato hablan más por el texto que el contenido. +
      +
    • Para formatear un texto a default, usa =G.
    • +
    • Para estructurar texto, utiliza >>.
    • +
    • Para regresar a un bloque, utiliza <<.
    • +
    +
  • +
+
+
+
+

Siete hábitos para editar
texto efectivamente.

+
+

La practica hace al maestro.

+ + +

Mas que practicar, se trata de analizar. + Cada vez que analizas tus movimientos y cuanto inviertes escribiendo, + más te puedes acercar a un punto cero.

+

Todo editor de texto, o IDE profesional, tiene un margen de aprendizaje.

+

Como en cualquier practica del Zen, primero se piensa y luego se actúa.

+ +
+
+
+
+

Usando Vim

+
+

Gracias por su tiempo.
No usen Emacs.
No, no es cierto usen lo que quieran.
Nomas nano, no. Por favor.

+Carlos Ivan Sosa

gnusosa

+

Cuenta de github

+

log.gnusosa.net

+

¡Googlealo apá!

+
+
+ + + diff --git a/platicas/taller-vim-1/slidy.css b/platicas/taller-vim-1/slidy.css new file mode 100644 index 0000000..9cb2fab --- /dev/null +++ b/platicas/taller-vim-1/slidy.css @@ -0,0 +1,400 @@ +/* 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%; +} + +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; +} + +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/platicas/taller-vim-1/slidy.js b/platicas/taller-vim-1/slidy.js new file mode 100644 index 0000000..c4e346d --- /dev/null +++ b/platicas/taller-vim-1/slidy.js @@ -0,0 +1,2881 @@ +/* slidy.js + + 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 + + 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), + 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), + keyboardless: (this.ipad || this.iphone), + + // 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; + + // 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, "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 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.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; + }, + + + // ### 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 = "Tap footer to move to next slide"; + else + p1.innerHTML = "Space or Right Arrow 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 + (node.nodeName == "H1" || + node.nodeName == "h1" || + node.nodeName == "DIV" || + node.nodeName == "div")) + 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 + 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 (w3c_slidy.ie && !w3c_slidy.ie8) + 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; + }, + + // right mouse button click is reserved for context menus + // it is more reliable to detect rightclick than leftclick + mouse_button_click: function (e) { + 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 (e) { + var tag = e.nodeName.toLowerCase(); + + return e.onkeydown || + e.onclick || + tag == "a" || + tag == "embed" || + tag == "object" || + tag == "video" || + tag == "audio" || + 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/platicas/taller-vim-1/w3c-black.css b/platicas/taller-vim-1/w3c-black.css new file mode 100644 index 0000000..dc43b11 --- /dev/null +++ b/platicas/taller-vim-1/w3c-black.css @@ -0,0 +1,497 @@ +/* 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: "Gill Sans MT", "Gill Sans", GillSans, 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: 4.1em; + padding: 0 0 0 0.2em; + margin: 0 0 0 0; + border-width: 0; + background-color: white; +} + +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-left: 3em; + padding-right: 3em; + padding-top: 0.1em; + margin-bottom: 0.8em; + margin-top: -0.05em; + margin-left: 0; + margin-right: 0; + min-height: 2.3em; + color: black; + height: 2.2em; + font-size: 160%; + line-height: 1.1em; +} + +div.slide h1 a { + color: black; + text-decoration: none; +} + +div.slide h1 a:link { + color: black; + text-decoration: none; +} + +div.slide h1 a:visited { + color: black; + text-decoration: none; +} + +div.slide h1 a:hover { + color: black; + text-decoration: underline; +} + +div.slide h1 a:active { + color: red; + text-decoration: underline; +} + +.head-icon { + margin-top: 0.5em; + margin-bottom: 0; + margin-left: 0; + margin-right: 1em; + background: white; + border-width: 0; + height: 3em; + max-width: 3em; + z-index: 2; + float: left; +} + +#head-logo { + margin: 0; + margin-top: 0.25em; + padding-top: 0.25em; + padding-bottom: 0.2em; + padding-left: 0; + padding-right: 0; + height: 3.2em; + width: 4.8em; + float: right; + z-index: 2; + background: white; +} + +.head-logo-fallback { + margin: 0; + padding: 0; + 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: 1em; + 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.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: black; + background-color: white; + padding-top: 0; + padding-right: 0; + padding-left: 3em; + height: 100%; +} + +div.slide.cover h1 { + margin: 0; + padding: 0.5em; + color: black; + height: auto; +} + +div.slide.cover h2 { + color: black; +} + +div.slide.cover a { + color: black; +} + +div.slide.cover a:visited { color: black} +div.slide.cover a:link { color: black} +div.slide.cover a:hover { color: red; text-decoration: underline } +div.slide.cover a:active { color: red; text-decoration: underline } + +div.slide.cover a:hover, div.slide.cover a:active { + color: red; text-decoration: underline; +} + +div.slide.cover img.cover { + margin: 0 0 0 0; + float: right; + padding-bottom: 4em; + overflow: hidden; +} + +div.slide.cover img.vimlogo{ + margin-right: 20%; + float: right; + padding-bottom: 4em; + overflow: hidden; +} + +div.slide.cover a:hover, div.slide.cover a:active { + color: red; 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 } +} -- cgit v1.3-2-g0d8e