From d7c5ad7d6263fd1baf9bfdbaa4c50b70ef2fbdb2 Mon Sep 17 00:00:00 2001 From: Alexander Sulfrian Date: Tue, 8 Jun 2010 08:22:05 +0200 Subject: reverted folder structure change for better mergeing with upstream --- trunk/etherpad/src/static/crossdomain.xml | 12 + .../etherpad/src/static/css/admin/admin-stats.css | 183 + trunk/etherpad/src/static/css/beta.css | 49 + trunk/etherpad/src/static/css/broadcast.css | 386 ++ .../src/static/css/connection_diagnostics.css | 13 + trunk/etherpad/src/static/css/etherpad.css | 770 ++++ trunk/etherpad/src/static/css/fluxbb.css | 55 + trunk/etherpad/src/static/css/framedpage.css | 175 + .../etherpad/src/static/css/global-pro-account.css | 52 + trunk/etherpad/src/static/css/home-opensource.css | 44 + trunk/etherpad/src/static/css/home.css | 264 ++ .../src/static/css/lib/jquery.contextmenu.css | 244 ++ trunk/etherpad/src/static/css/pad.css | 1000 +++++ trunk/etherpad/src/static/css/pad2_ejs.css | 889 ++++ trunk/etherpad/src/static/css/pne-manual.css | 143 + trunk/etherpad/src/static/css/pricing.css | 153 + trunk/etherpad/src/static/css/pro-signup.css | 69 + trunk/etherpad/src/static/css/pro/account.css | 254 ++ .../etherpad/src/static/css/pro/framedpage-pro.css | 125 + trunk/etherpad/src/static/css/pro/padlist.css | 115 + .../src/static/css/pro/payment-required.css | 39 + trunk/etherpad/src/static/css/pro/pro-admin.css | 343 ++ trunk/etherpad/src/static/css/pro/pro-home.css | 65 + trunk/etherpad/src/static/css/stats.css | 71 + .../src/static/css/store/eepnet-checkout.css | 284 ++ .../src/static/css/store/ondemand-billing.css | 170 + trunk/etherpad/src/static/css/store/store.css | 90 + trunk/etherpad/src/static/favicon.ico | Bin 0 -> 1354 bytes .../src/static/img/about/appjet-logo-large.gif | Bin 0 -> 11045 bytes .../src/static/img/about/appjet-logo-medium.png | Bin 0 -> 4127 bytes .../src/static/img/about/investors/mitchkapor.jpg | Bin 0 -> 30223 bytes .../etherpad/src/static/img/about/investors/pb.jpg | Bin 0 -> 23929 bytes .../etherpad/src/static/img/about/investors/pg.jpg | Bin 0 -> 28915 bytes .../src/static/img/about/investors/sanjeev.jpg | Bin 0 -> 23342 bytes .../src/static/img/about/investors/seth.jpg | Bin 0 -> 27346 bytes .../img/about/people/aaron-david-iphones-thumb.jpg | Bin 0 -> 145654 bytes .../img/about/people/aaron-david-iphones.jpg | Bin 0 -> 145654 bytes .../static/img/about/people/aaron-google-air.jpg | Bin 0 -> 163592 bytes .../img/about/people/aaron-headshot-thumb.jpg | Bin 0 -> 11310 bytes .../src/static/img/about/people/aaron-headshot.jpg | Bin 0 -> 83517 bytes .../img/about/people/aaron-headshot2-thumb.jpg | Bin 0 -> 29884 bytes .../static/img/about/people/aaron-headshot2.jpg | Bin 0 -> 99738 bytes .../img/about/people/aaron-headshot3-thumb.jpg | Bin 0 -> 27864 bytes .../static/img/about/people/aaron-headshot3.jpg | Bin 0 -> 195114 bytes .../img/about/people/daniel-headshot-thumb.jpg | Bin 0 -> 21991 bytes .../img/about/people/david-headshot-thumb.jpg | Bin 0 -> 18650 bytes .../src/static/img/about/people/david-headshot.jpg | Bin 0 -> 63296 bytes .../src/static/img/about/people/davy-headshot.jpg | Bin 0 -> 20175 bytes .../static/img/about/people/jd-headshot-thumb.jpg | Bin 0 -> 13008 bytes .../src/static/img/about/people/jd-headshot.jpg | Bin 0 -> 37777 bytes .../img/about/people/rhonda-headshot-thumb.jpg | Bin 0 -> 17360 bytes .../static/img/about/people/rhonda-headshot.jpg | Bin 0 -> 133259 bytes trunk/etherpad/src/static/img/about/pier38.png | Bin 0 -> 66877 bytes .../etherpad/src/static/img/about/quote-close.png | Bin 0 -> 1361 bytes trunk/etherpad/src/static/img/about/quote-open.png | Bin 0 -> 1341 bytes .../static/img/about/screencastpreview800x600.jpg | Bin 0 -> 248364 bytes trunk/etherpad/src/static/img/account/betawarn.jpg | Bin 0 -> 13535 bytes trunk/etherpad/src/static/img/acecarets/000000.gif | Bin 0 -> 41 bytes trunk/etherpad/src/static/img/acecarets/666666.gif | Bin 0 -> 41 bytes trunk/etherpad/src/static/img/acecarets/999999.gif | Bin 0 -> 41 bytes .../etherpad/src/static/img/acecarets/default.gif | Bin 0 -> 43 bytes trunk/etherpad/src/static/img/apr09/backgrad.png | Bin 0 -> 2276 bytes trunk/etherpad/src/static/img/apr09/black35.png | Bin 0 -> 221 bytes trunk/etherpad/src/static/img/apr09/blank.gif | Bin 0 -> 129 bytes trunk/etherpad/src/static/img/apr09/modalbar.gif | Bin 0 -> 145 bytes trunk/etherpad/src/static/img/apr09/newpadicon.gif | Bin 0 -> 89 bytes trunk/etherpad/src/static/img/apr09/shadbot.png | Bin 0 -> 149 bytes trunk/etherpad/src/static/img/apr09/shadleft.png | Bin 0 -> 142 bytes .../etherpad/src/static/img/apr09/shadleftbot.png | Bin 0 -> 172 bytes .../etherpad/src/static/img/apr09/shadlefttop.png | Bin 0 -> 929 bytes trunk/etherpad/src/static/img/apr09/shadright.png | Bin 0 -> 136 bytes .../etherpad/src/static/img/apr09/shadrightbot.png | Bin 0 -> 174 bytes .../etherpad/src/static/img/apr09/shadrighttop.png | Bin 0 -> 954 bytes trunk/etherpad/src/static/img/apr09/topbar.gif | Bin 0 -> 180 bytes trunk/etherpad/src/static/img/apr09/topbarlogo.gif | Bin 0 -> 1784 bytes trunk/etherpad/src/static/img/apr09/widthfull.gif | Bin 0 -> 104 bytes .../src/static/img/apr09/widthfullactive.gif | Bin 0 -> 104 bytes trunk/etherpad/src/static/img/apr09/widthlim.gif | Bin 0 -> 102 bytes .../src/static/img/apr09/widthlimactive.gif | Bin 0 -> 102 bytes trunk/etherpad/src/static/img/billing/amex.gif | Bin 0 -> 995 bytes .../etherpad/src/static/img/billing/creditcard.gif | Bin 0 -> 1229 bytes trunk/etherpad/src/static/img/billing/csc-help.gif | Bin 0 -> 9430 bytes trunk/etherpad/src/static/img/billing/disc.gif | Bin 0 -> 370 bytes trunk/etherpad/src/static/img/billing/invoice.gif | Bin 0 -> 424 bytes trunk/etherpad/src/static/img/billing/mc.gif | Bin 0 -> 1370 bytes trunk/etherpad/src/static/img/billing/paypal.gif | Bin 0 -> 812 bytes trunk/etherpad/src/static/img/billing/visa.gif | Bin 0 -> 724 bytes .../img/blog/posts/new-features/fullwidth.gif | Bin 0 -> 7328 bytes .../img/blog/posts/new-features/importexport.gif | Bin 0 -> 9758 bytes .../img/blog/posts/new-features/richtext.gif | Bin 0 -> 2146 bytes .../img/blog/posts/new-features/viewzoom.gif | Bin 0 -> 8257 bytes .../img/blog/posts/pricing-survey-results.png | Bin 0 -> 12994 bytes .../src/static/img/blog/posts/pricing-survey.png | Bin 0 -> 10589 bytes .../img/blog/posts/time-slider-screenshot.gif | Bin 0 -> 6544 bytes .../src/static/img/davy/bg/home-createpad.png | Bin 0 -> 4327 bytes .../static/img/davy/bg/home-features-bottom.gif | Bin 0 -> 308 bytes .../img/davy/bg/home-features-free-bottom.gif | Bin 0 -> 298 bytes .../static/img/davy/bg/home-features-paid-top.gif | Bin 0 -> 459 bytes .../src/static/img/davy/bg/home-features-top.gif | Bin 0 -> 489 bytes .../src/static/img/davy/bg/home-nav-selected.png | Bin 0 -> 195 bytes .../src/static/img/davy/bg/home-screencast.png | Bin 0 -> 5738 bytes trunk/etherpad/src/static/img/davy/bg/home2.png | Bin 0 -> 367 bytes .../img/davy/bg/product-nav-selected-white.png | Bin 0 -> 196 bytes .../static/img/davy/bg/product-nav-selected.png | Bin 0 -> 198 bytes trunk/etherpad/src/static/img/davy/bg/product.png | Bin 0 -> 161 bytes .../src/static/img/davy/btn/createpad-home.gif | Bin 0 -> 5839 bytes .../src/static/img/davy/btn/createpad-large.gif | Bin 0 -> 6614 bytes .../src/static/img/davy/btn/createpad-small.gif | Bin 0 -> 3148 bytes .../src/static/img/davy/btn/intro-screencast.png | Bin 0 -> 815 bytes .../src/static/img/davy/btn/intro-testimonials.png | Bin 0 -> 816 bytes .../etherpad/src/static/img/davy/btn/learnmore.gif | Bin 0 -> 3103 bytes .../src/static/img/davy/btn/signup-home-2.gif | Bin 0 -> 5827 bytes .../src/static/img/davy/btn/signup-home-3.gif | Bin 0 -> 5735 bytes .../src/static/img/davy/btn/signup-home-4.gif | Bin 0 -> 5818 bytes .../src/static/img/davy/btn/signup-home.gif | Bin 0 -> 5815 bytes .../etherpad/src/static/img/davy/btn/uses-more.gif | Bin 0 -> 1485 bytes trunk/etherpad/src/static/img/davy/gfx/32/114.png | Bin 0 -> 2424 bytes trunk/etherpad/src/static/img/davy/gfx/32/15.png | Bin 0 -> 2904 bytes trunk/etherpad/src/static/img/davy/gfx/32/65.png | Bin 0 -> 3028 bytes trunk/etherpad/src/static/img/davy/gfx/32/78.png | Bin 0 -> 2208 bytes trunk/etherpad/src/static/img/davy/gfx/bullet.gif | Bin 0 -> 55 bytes .../src/static/img/davy/gfx/home-logo2.gif | Bin 0 -> 7136 bytes .../src/static/img/davy/gfx/home-screencast.png | Bin 0 -> 65832 bytes trunk/etherpad/src/static/img/davy/gfx/plane.gif | Bin 0 -> 56 bytes .../src/static/img/davy/gfx/product-logo.gif | Bin 0 -> 2222 bytes .../src/static/img/davy/gfx/screenshot.gif | Bin 0 -> 23708 bytes .../src/static/img/davy/gfx/use-meetings.gif | Bin 0 -> 10521 bytes .../src/static/img/davy/gfx/use-meetings.png | Bin 0 -> 25506 bytes .../src/static/img/davy/gfx/use-programming.gif | Bin 0 -> 13655 bytes .../src/static/img/davy/gfx/use-programming.png | Bin 0 -> 56154 bytes .../src/static/img/davy/gfx/use-writing.gif | Bin 0 -> 22275 bytes .../src/static/img/davy/gfx/use-writing.png | Bin 0 -> 38264 bytes .../src/static/img/davy/txt/home-button.gif | Bin 0 -> 4749 bytes trunk/etherpad/src/static/img/featuretour/code.gif | Bin 0 -> 27794 bytes .../etherpad/src/static/img/featuretour/edits.gif | Bin 0 -> 24788 bytes .../src/static/img/featuretour/editsandusers.gif | Bin 0 -> 21815 bytes .../src/static/img/featuretour/padlock.png | Bin 0 -> 13061 bytes .../src/static/img/featuretour/revisions.gif | Bin 0 -> 20820 bytes .../etherpad/src/static/img/featuretour/users.gif | Bin 0 -> 8843 bytes .../src/static/img/feb09/framedheaderback.gif | Bin 0 -> 606 bytes .../src/static/img/feb09/framedheaderlogo.gif | Bin 0 -> 8177 bytes .../etherpad/src/static/img/feb09/home_firstp.gif | Bin 0 -> 7754 bytes .../etherpad/src/static/img/feb09/home_firstp.png | Bin 0 -> 15320 bytes .../etherpad/src/static/img/feb09/home_firstp2.gif | Bin 0 -> 7919 bytes trunk/etherpad/src/static/img/feb09/home_h1.gif | Bin 0 -> 11332 bytes trunk/etherpad/src/static/img/feb09/home_h1.png | Bin 0 -> 28857 bytes .../src/static/img/feb09/home_newpadbutton.gif | Bin 0 -> 6828 bytes .../src/static/img/feb09/home_newpadbutton.png | Bin 0 -> 10554 bytes .../src/static/img/feb09/home_newpadbutton2.gif | Bin 0 -> 7112 bytes .../static/img/feb09/home_newpadbutton_eepnet.gif | Bin 0 -> 5442 bytes .../etherpad/src/static/img/feb09/hometop_back.gif | Bin 0 -> 2743 bytes trunk/etherpad/src/static/img/feb09/nav1.gif | Bin 0 -> 10901 bytes trunk/etherpad/src/static/img/feb09/nav1_back.gif | Bin 0 -> 150 bytes trunk/etherpad/src/static/img/feb09/nav2.gif | Bin 0 -> 17028 bytes trunk/etherpad/src/static/img/feb09/screencast.gif | Bin 0 -> 20091 bytes .../src/static/img/home/etherpad-mainheader1.jpg | Bin 0 -> 48871 bytes .../src/static/img/home/headergradient.gif | Bin 0 -> 246 bytes trunk/etherpad/src/static/img/home/homeheader1.jpg | Bin 0 -> 33227 bytes trunk/etherpad/src/static/img/home/homeheader2.jpg | Bin 0 -> 33259 bytes trunk/etherpad/src/static/img/home/leftgrad.gif | Bin 0 -> 113 bytes .../src/static/img/home/pencilpaperback.png | Bin 0 -> 83487 bytes .../src/static/img/home/screencapture1.gif | Bin 0 -> 106694 bytes .../etherpad/src/static/img/home/underdevicon.gif | Bin 0 -> 98 bytes trunk/etherpad/src/static/img/icon/downarrow.gif | Bin 0 -> 376 bytes trunk/etherpad/src/static/img/icon/feed.gif | Bin 0 -> 1135 bytes .../etherpad/src/static/img/jun09/pad/backgrad.gif | Bin 0 -> 697 bytes .../src/static/img/jun09/pad/bottomareagfx.gif | Bin 0 -> 1045 bytes .../src/static/img/jun09/pad/colorpicker.gif | Bin 0 -> 1806 bytes .../src/static/img/jun09/pad/connectingbar.gif | Bin 0 -> 10819 bytes .../static/img/jun09/pad/connectionindicator.gif | Bin 0 -> 1185 bytes .../src/static/img/jun09/pad/docbarstates.png | Bin 0 -> 3314 bytes .../src/static/img/jun09/pad/docbarstates2.png | Bin 0 -> 4902 bytes .../src/static/img/jun09/pad/docbarstates3.png | Bin 0 -> 4990 bytes .../src/static/img/jun09/pad/docpaneledge.png | Bin 0 -> 589 bytes .../src/static/img/jun09/pad/docpaneledge2.png | Bin 0 -> 635 bytes .../src/static/img/jun09/pad/docpanelmiddle.png | Bin 0 -> 240 bytes .../src/static/img/jun09/pad/docpanelmiddle2.png | Bin 0 -> 295 bytes .../etherpad/src/static/img/jun09/pad/editbar.gif | Bin 0 -> 4667 bytes .../etherpad/src/static/img/jun09/pad/editbar2.gif | Bin 0 -> 9156 bytes .../etherpad/src/static/img/jun09/pad/editbar3.png | Bin 0 -> 16869 bytes .../etherpad/src/static/img/jun09/pad/editbar3.xcf | Bin 0 -> 79212 bytes .../src/static/img/jun09/pad/editbarback.gif | Bin 0 -> 368 bytes .../src/static/img/jun09/pad/feedbackbox2.gif | Bin 0 -> 6262 bytes .../src/static/img/jun09/pad/fileicons.gif | Bin 0 -> 1397 bytes .../etherpad/src/static/img/jun09/pad/hdraggie.gif | Bin 0 -> 453 bytes .../src/static/img/jun09/pad/inviteshare.gif | Bin 0 -> 511 bytes .../src/static/img/jun09/pad/inviteshare2.gif | Bin 0 -> 1836 bytes .../src/static/img/jun09/pad/layoutbuttons.gif | Bin 0 -> 3750 bytes .../etherpad/src/static/img/jun09/pad/overlay.png | Bin 0 -> 141 bytes .../etherpad/src/static/img/jun09/pad/overlay2.png | Bin 0 -> 149 bytes trunk/etherpad/src/static/img/jun09/pad/padtop.gif | Bin 0 -> 8055 bytes .../etherpad/src/static/img/jun09/pad/padtop2.gif | Bin 0 -> 6168 bytes .../etherpad/src/static/img/jun09/pad/padtop3.gif | Bin 0 -> 7511 bytes .../etherpad/src/static/img/jun09/pad/padtop4.gif | Bin 0 -> 8192 bytes .../etherpad/src/static/img/jun09/pad/padtop4.png | Bin 0 -> 17161 bytes .../etherpad/src/static/img/jun09/pad/padtop4.xcf | Bin 0 -> 41184 bytes .../etherpad/src/static/img/jun09/pad/padtop5.png | Bin 0 -> 18850 bytes .../etherpad/src/static/img/jun09/pad/padtop5.xcf | Bin 0 -> 66525 bytes .../src/static/img/jun09/pad/padtopback.gif | Bin 0 -> 553 bytes .../src/static/img/jun09/pad/padtopback2.gif | Bin 0 -> 384 bytes trunk/etherpad/src/static/img/jun09/pad/protop.png | Bin 0 -> 6768 bytes trunk/etherpad/src/static/img/jun09/pad/protop.xcf | Bin 0 -> 16565 bytes trunk/etherpad/src/static/img/jun09/pad/public.gif | Bin 0 -> 1141 bytes .../src/static/img/jun09/pad/savedrevarrows.gif | Bin 0 -> 866 bytes .../src/static/img/jun09/pad/savedrevsgfx2.gif | Bin 0 -> 1904 bytes .../src/static/img/jun09/pad/sharebox2.gif | Bin 0 -> 8836 bytes .../src/static/img/jun09/pad/sharebox3.gif | Bin 0 -> 6056 bytes .../src/static/img/jun09/pad/sharebox4.gif | Bin 0 -> 5788 bytes .../src/static/img/jun09/pad/sharedistri.gif | Bin 0 -> 85 bytes .../etherpad/src/static/img/jun09/pad/syncdone.gif | Bin 0 -> 211 bytes .../etherpad/src/static/img/jun09/pad/syncing.gif | Bin 0 -> 673 bytes .../etherpad/src/static/img/jun09/pad/syncing2.gif | Bin 0 -> 172 bytes .../src/static/img/jun09/pad/viewbargfx.gif | Bin 0 -> 155 bytes .../cmenu-gloss-cyan-menu-item-hover.gif | Bin 0 -> 52 bytes .../cmenu-gloss-menu-item-hover.gif | Bin 0 -> 52 bytes ...cmenu-gloss-semitransparent-menu-item-hover.png | Bin 0 -> 2837 bytes .../cmenu-human-menu-item-hover.gif | Bin 0 -> 195 bytes .../cmenu-osx-menu-item-hover.gif | Bin 0 -> 87 bytes .../jquery.contextmenu.images/cmenu-vista-bg.gif | Bin 0 -> 64 bytes .../cmenu-vista-menu-item-hover.gif | Bin 0 -> 347 bytes .../lib/jquery.contextmenu.images/cmenu-xp-bg.gif | Bin 0 -> 223 bytes trunk/etherpad/src/static/img/may09/bold.gif | Bin 0 -> 70 bytes trunk/etherpad/src/static/img/may09/doc.gif | Bin 0 -> 632 bytes trunk/etherpad/src/static/img/may09/doc.png | Bin 0 -> 3317 bytes trunk/etherpad/src/static/img/may09/html.gif | Bin 0 -> 1040 bytes trunk/etherpad/src/static/img/may09/html.png | Bin 0 -> 3468 bytes trunk/etherpad/src/static/img/may09/italic.gif | Bin 0 -> 73 bytes trunk/etherpad/src/static/img/may09/leftarrow.gif | Bin 0 -> 1016 bytes trunk/etherpad/src/static/img/may09/leftarrow2.gif | Bin 0 -> 950 bytes trunk/etherpad/src/static/img/may09/link.gif | Bin 0 -> 622 bytes trunk/etherpad/src/static/img/may09/link.png | Bin 0 -> 3323 bytes trunk/etherpad/src/static/img/may09/odt.gif | Bin 0 -> 405 bytes trunk/etherpad/src/static/img/may09/odt.png | Bin 0 -> 3341 bytes trunk/etherpad/src/static/img/may09/padlock.gif | Bin 0 -> 1053 bytes .../etherpad/src/static/img/may09/padlockopen.gif | Bin 0 -> 109 bytes .../src/static/img/may09/passwordlocked.gif | Bin 0 -> 1053 bytes .../static/img/may09/passwordlocked_cropped.gif | Bin 0 -> 114 bytes .../etherpad/src/static/img/may09/passwordnone.gif | Bin 0 -> 636 bytes trunk/etherpad/src/static/img/may09/paypal.gif | Bin 0 -> 3794 bytes trunk/etherpad/src/static/img/may09/pdf.gif | Bin 0 -> 398 bytes trunk/etherpad/src/static/img/may09/pdf.png | Bin 0 -> 3320 bytes trunk/etherpad/src/static/img/may09/redo.gif | Bin 0 -> 78 bytes trunk/etherpad/src/static/img/may09/txt.gif | Bin 0 -> 381 bytes trunk/etherpad/src/static/img/may09/txt.png | Bin 0 -> 3139 bytes trunk/etherpad/src/static/img/may09/underline.gif | Bin 0 -> 81 bytes trunk/etherpad/src/static/img/may09/undo.gif | Bin 0 -> 79 bytes trunk/etherpad/src/static/img/miniplane.gif | Bin 0 -> 70 bytes .../src/static/img/misc/diagnostic-links.gif | Bin 0 -> 10132 bytes trunk/etherpad/src/static/img/misc/status-ball.gif | Bin 0 -> 1553 bytes trunk/etherpad/src/static/img/misc/traclogo.gif | Bin 0 -> 5684 bytes trunk/etherpad/src/static/img/oct/atlonglast.gif | Bin 0 -> 4901 bytes trunk/etherpad/src/static/img/oct/banner1.jpg | Bin 0 -> 19897 bytes trunk/etherpad/src/static/img/oct/banner2.jpg | Bin 0 -> 45052 bytes trunk/etherpad/src/static/img/oct/banner3.jpg | Bin 0 -> 38726 bytes trunk/etherpad/src/static/img/oct/banner4.jpg | Bin 0 -> 39563 bytes trunk/etherpad/src/static/img/oct/banner5.gif | Bin 0 -> 24046 bytes trunk/etherpad/src/static/img/oct/banner6.gif | Bin 0 -> 23655 bytes trunk/etherpad/src/static/img/oct/banner7.gif | Bin 0 -> 24352 bytes trunk/etherpad/src/static/img/oct/banner8.gif | Bin 0 -> 24724 bytes trunk/etherpad/src/static/img/oct/banner9.gif | Bin 0 -> 24363 bytes trunk/etherpad/src/static/img/oct/bannerback5.gif | Bin 0 -> 2957 bytes trunk/etherpad/src/static/img/oct/bannerback6.gif | Bin 0 -> 2140 bytes trunk/etherpad/src/static/img/oct/bodyback1.gif | Bin 0 -> 488 bytes trunk/etherpad/src/static/img/oct/bodyback2.gif | Bin 0 -> 560 bytes trunk/etherpad/src/static/img/oct/bodyback3.gif | Bin 0 -> 608 bytes trunk/etherpad/src/static/img/oct/bodyback4.gif | Bin 0 -> 964 bytes trunk/etherpad/src/static/img/oct/bodyback5.gif | Bin 0 -> 579 bytes trunk/etherpad/src/static/img/oct/bodybacktop1.gif | Bin 0 -> 2991 bytes trunk/etherpad/src/static/img/oct/computers.gif | Bin 0 -> 27542 bytes trunk/etherpad/src/static/img/oct/computers2.gif | Bin 0 -> 27434 bytes trunk/etherpad/src/static/img/oct/glossyblue.gif | Bin 0 -> 1521 bytes trunk/etherpad/src/static/img/oct/glossyblue2.gif | Bin 0 -> 994 bytes trunk/etherpad/src/static/img/oct/glossyblueh.gif | Bin 0 -> 920 bytes trunk/etherpad/src/static/img/oct/insetrect.gif | Bin 0 -> 7056 bytes .../etherpad/src/static/img/oct/minilogo1-05e.gif | Bin 0 -> 2201 bytes .../etherpad/src/static/img/oct/minilogo1-07f.gif | Bin 0 -> 2252 bytes trunk/etherpad/src/static/img/oct/minilogo3.jpg | Bin 0 -> 12805 bytes trunk/etherpad/src/static/img/oct/minitopback1.gif | Bin 0 -> 954 bytes trunk/etherpad/src/static/img/oct/minitopback2.gif | Bin 0 -> 1598 bytes .../src/static/img/oct/minitopbar1-05e.gif | Bin 0 -> 284 bytes .../src/static/img/oct/minitopbar2-05e.gif | Bin 0 -> 330 bytes .../src/static/img/oct/minitopbar2-07f.gif | Bin 0 -> 330 bytes trunk/etherpad/src/static/img/oct/minitopbar3.jpg | Bin 0 -> 12805 bytes trunk/etherpad/src/static/img/oct/minitopbar4.gif | Bin 0 -> 2818 bytes trunk/etherpad/src/static/img/oct/minitoplogo1.gif | Bin 0 -> 4184 bytes trunk/etherpad/src/static/img/oct/minitoplogo2.gif | Bin 0 -> 3255 bytes trunk/etherpad/src/static/img/oct/newpadmain.gif | Bin 0 -> 1172 bytes .../etherpad/src/static/img/oct/newpadmainback.gif | Bin 0 -> 801 bytes .../src/static/img/oct/newpadmainbackh.gif | Bin 0 -> 801 bytes trunk/etherpad/src/static/img/oct/pageshot.png | Bin 0 -> 151570 bytes trunk/etherpad/src/static/img/oct/pageshotmini.png | Bin 0 -> 80505 bytes .../src/static/img/oct/sidehead-gradhilite.gif | Bin 0 -> 288 bytes trunk/etherpad/src/static/img/oct/tinytriangle.gif | Bin 0 -> 62 bytes trunk/etherpad/src/static/img/oct/topnav1.gif | Bin 0 -> 12521 bytes trunk/etherpad/src/static/img/oct/topnav2.gif | Bin 0 -> 11286 bytes trunk/etherpad/src/static/img/oct/topnav3.gif | Bin 0 -> 12363 bytes trunk/etherpad/src/static/img/oct/topnav4.gif | Bin 0 -> 11803 bytes trunk/etherpad/src/static/img/oct/topnav5.gif | Bin 0 -> 11650 bytes trunk/etherpad/src/static/img/oct/topnav6.gif | Bin 0 -> 11295 bytes trunk/etherpad/src/static/img/oct/topnavback1.gif | Bin 0 -> 1594 bytes trunk/etherpad/src/static/img/oct/topnavback2.gif | Bin 0 -> 1299 bytes trunk/etherpad/src/static/img/oct/topnavback3.gif | Bin 0 -> 380 bytes .../src/static/img/oct/usecasesnavdown.gif | Bin 0 -> 1388 bytes .../src/static/img/oct/usecasesnavdownh.gif | Bin 0 -> 1337 bytes .../etherpad/src/static/img/oct/usecasesnavup.gif | Bin 0 -> 1119 bytes .../etherpad/src/static/img/oct/usecasesnavuph.gif | Bin 0 -> 720 bytes .../src/static/img/oct/watchscreencast.gif | Bin 0 -> 25840 bytes .../src/static/img/pad/animated-orb-orange-12.gif | Bin 0 -> 2614 bytes trunk/etherpad/src/static/img/pad/backgrad.png | Bin 0 -> 1290 bytes .../pad/backshadow/backshadow-940-20-eee-20.gif | Bin 0 -> 1052 bytes .../pad/backshadow/backshadow-940-20-fff-20.gif | Bin 0 -> 1052 bytes .../pad/backshadow/backshadow-940-20-fff-40.gif | Bin 0 -> 1009 bytes .../pad/backshadow/backshadow-940-20-fff-60.gif | Bin 0 -> 1123 bytes .../img/pad/backshadow/botshadow-940-20-eee-20.gif | Bin 0 -> 1746 bytes .../static/img/pad/etherpad-logo-small-grad.gif | Bin 0 -> 1537 bytes .../src/static/img/pad/etherpad-logo-small.gif | Bin 0 -> 6664 bytes .../src/static/img/pad/etherpad-logo-small2.gif | Bin 0 -> 6646 bytes .../src/static/img/pad/expandy-arrow-down.gif | Bin 0 -> 500 bytes .../src/static/img/pad/expandy-arrow-right.gif | Bin 0 -> 296 bytes .../static/img/pad/expandy-arrow6-down-active.gif | Bin 0 -> 57 bytes .../src/static/img/pad/expandy-arrow6-down.gif | Bin 0 -> 57 bytes .../static/img/pad/expandy-arrow6-right-active.gif | Bin 0 -> 61 bytes .../src/static/img/pad/expandy-arrow6-right.gif | Bin 0 -> 61 bytes .../etherpad/src/static/img/pad/header-revgrad.gif | Bin 0 -> 598 bytes trunk/etherpad/src/static/img/pad/newpad.gif | Bin 0 -> 251 bytes .../src/static/img/pad/orb-greenred-12.gif | Bin 0 -> 1105 bytes trunk/etherpad/src/static/img/pad/padbg1.jpg | Bin 0 -> 120888 bytes trunk/etherpad/src/static/img/pad/padbg2.jpg | Bin 0 -> 44119 bytes trunk/etherpad/src/static/img/pad/padbg3.jpg | Bin 0 -> 12577 bytes trunk/etherpad/src/static/img/pad/padbg4.jpg | Bin 0 -> 12696 bytes trunk/etherpad/src/static/img/pad/padbg5.jpg | Bin 0 -> 8158 bytes trunk/etherpad/src/static/img/pad/padhead1.jpg | Bin 0 -> 13413 bytes trunk/etherpad/src/static/img/pad/padhead2.jpg | Bin 0 -> 14104 bytes trunk/etherpad/src/static/img/pad/padhead3.jpg | Bin 0 -> 6750 bytes .../src/static/img/pad/pencil-icon-small-blue.gif | Bin 0 -> 84 bytes .../etherpad/src/static/img/pad/sidehead-grad.gif | Bin 0 -> 292 bytes .../static/img/pad/timeslider/button_depressed.png | Bin 0 -> 4610 bytes .../img/pad/timeslider/button_undepressed.png | Bin 0 -> 4625 bytes .../pad/timeslider/crushed_button_depressed.png | Bin 0 -> 4134 bytes .../pad/timeslider/crushed_button_undepressed.png | Bin 0 -> 4166 bytes .../pad/timeslider/crushed_current_location.png | Bin 0 -> 1009 bytes .../static/img/pad/timeslider/crushed_pause.png | Bin 0 -> 2876 bytes .../src/static/img/pad/timeslider/crushed_play.png | Bin 0 -> 2946 bytes .../img/pad/timeslider/crushed_play_button.png | Bin 0 -> 4305 bytes .../pad/timeslider/crushed_timeslider_mockup.png | Bin 0 -> 8164 bytes .../static/img/pad/timeslider/current_location.gif | Bin 0 -> 1502 bytes .../static/img/pad/timeslider/current_location.png | Bin 0 -> 1100 bytes .../src/static/img/pad/timeslider/pause.gif | Bin 0 -> 3320 bytes .../src/static/img/pad/timeslider/pause.png | Bin 0 -> 2883 bytes .../src/static/img/pad/timeslider/play.gif | Bin 0 -> 3297 bytes .../src/static/img/pad/timeslider/play.png | Bin 0 -> 3017 bytes .../src/static/img/pad/timeslider/play_button.png | Bin 0 -> 4867 bytes .../src/static/img/pad/timeslider/star.gif | Bin 0 -> 3511 bytes .../src/static/img/pad/timeslider/star.png | Bin 0 -> 3241 bytes .../static/img/pad/timeslider/star_selected.png | Bin 0 -> 3242 bytes .../static/img/pad/timeslider/stepper_buttons.png | Bin 0 -> 4858 bytes .../img/pad/timeslider/timeslider_background.png | Bin 0 -> 915 bytes .../static/img/pad/timeslider/timeslider_left.png | Bin 0 -> 1653 bytes .../img/pad/timeslider/timeslider_mockup.png | Bin 0 -> 4860 bytes .../static/img/pad/timeslider/timeslider_right.png | Bin 0 -> 1581 bytes trunk/etherpad/src/static/img/pricing/free.gif | Bin 0 -> 7419 bytes trunk/etherpad/src/static/img/pricing/group.gif | Bin 0 -> 6783 bytes .../etherpad/src/static/img/pricing/on-demand.gif | Bin 0 -> 5791 bytes .../src/static/img/pricing/private-network.gif | Bin 0 -> 4677 bytes trunk/etherpad/src/static/img/pricing/support.gif | Bin 0 -> 2028 bytes .../src/static/img/pro/billing/cards-button.gif | Bin 0 -> 9524 bytes .../src/static/img/pro/box/blue-boxtop.gif | Bin 0 -> 523 bytes .../src/static/img/pro/buttons/bluebutton120.gif | Bin 0 -> 951 bytes .../src/static/img/pro/header/pro-header-back.gif | Bin 0 -> 213 bytes .../src/static/img/pro/header/pro-header-logo.png | Bin 0 -> 5527 bytes .../src/static/img/pro/header/pro-header-logo.xcf | Bin 0 -> 13274 bytes .../img/pro/header/pro-header-plustopnav-back.gif | Bin 0 -> 474 bytes .../src/static/img/pro/padlist/gear-drop.gif | Bin 0 -> 300 bytes .../src/static/img/pro/padlist/paper-icon.gif | Bin 0 -> 619 bytes .../src/static/img/pro/padlist/trash-icon.gif | Bin 0 -> 1080 bytes .../src/static/img/pro/topnav/pro-topnav-back.gif | Bin 0 -> 137 bytes .../src/static/img/pro/topnav/pro-topnav-notch.gif | Bin 0 -> 92 bytes trunk/etherpad/src/static/img/tinyplane.gif | Bin 0 -> 59 bytes trunk/etherpad/src/static/img/wavejet.jpg | Bin 0 -> 55379 bytes trunk/etherpad/src/static/js/ace.js | 29 + trunk/etherpad/src/static/js/billing.js | 111 + trunk/etherpad/src/static/js/billing_shared.js | 94 + trunk/etherpad/src/static/js/broadcast.js | 607 +++ .../etherpad/src/static/js/broadcast_revisions.js | 119 + trunk/etherpad/src/static/js/broadcast_slider.js | 401 ++ trunk/etherpad/src/static/js/collab_client.js | 628 +++ trunk/etherpad/src/static/js/colorutils.js | 91 + trunk/etherpad/src/static/js/confirmation.js | 21 + .../src/static/js/connection_diagnostics.js | 126 + trunk/etherpad/src/static/js/cssmanager_client.js | 88 + trunk/etherpad/src/static/js/domline_client.js | 210 + trunk/etherpad/src/static/js/draggable.js | 60 + trunk/etherpad/src/static/js/easysync2_client.js | 1777 ++++++++ trunk/etherpad/src/static/js/etherpad.js | 217 + trunk/etherpad/src/static/js/jquery-1.2.6.js | 3549 ++++++++++++++++ trunk/etherpad/src/static/js/jquery-1.3.2.js | 4376 ++++++++++++++++++++ trunk/etherpad/src/static/js/json2.js | 498 +++ .../src/static/js/lib/jquery.contextmenu.js | 284 ++ .../src/static/js/linestylefilter_client.js | 252 ++ trunk/etherpad/src/static/js/pad.js.old | 1984 +++++++++ trunk/etherpad/src/static/js/pad2.js | 591 +++ trunk/etherpad/src/static/js/pad_chat.js | 295 ++ .../etherpad/src/static/js/pad_connectionstatus.js | 63 + trunk/etherpad/src/static/js/pad_cookie.js | 101 + trunk/etherpad/src/static/js/pad_docbar.js | 347 ++ trunk/etherpad/src/static/js/pad_editbar.js | 107 + trunk/etherpad/src/static/js/pad_editor.js | 136 + trunk/etherpad/src/static/js/pad_impexp.js | 187 + trunk/etherpad/src/static/js/pad_modals.js | 364 ++ trunk/etherpad/src/static/js/pad_savedrevs.js | 408 ++ trunk/etherpad/src/static/js/pad_userlist.js | 604 +++ trunk/etherpad/src/static/js/pad_utils.js | 359 ++ trunk/etherpad/src/static/js/pricing.js | 19 + .../src/static/js/pro/guest-knock-client.js | 53 + .../src/static/js/pro/pro-padlist-client.js | 104 + trunk/etherpad/src/static/js/pro/signin-client.js | 27 + trunk/etherpad/src/static/js/pulse.jquery.js | 105 + trunk/etherpad/src/static/js/statpage.js | 143 + trunk/etherpad/src/static/js/store.js | 116 + trunk/etherpad/src/static/js/swfobject.js | 24 + trunk/etherpad/src/static/js/timeslider.js | 663 +++ trunk/etherpad/src/static/js/undo-xpopup.js | 25 + trunk/etherpad/src/static/swf/vidplayer.swf | Bin 0 -> 41390 bytes 423 files changed, 26420 insertions(+) create mode 100644 trunk/etherpad/src/static/crossdomain.xml create mode 100644 trunk/etherpad/src/static/css/admin/admin-stats.css create mode 100644 trunk/etherpad/src/static/css/beta.css create mode 100644 trunk/etherpad/src/static/css/broadcast.css create mode 100644 trunk/etherpad/src/static/css/connection_diagnostics.css create mode 100644 trunk/etherpad/src/static/css/etherpad.css create mode 100644 trunk/etherpad/src/static/css/fluxbb.css create mode 100644 trunk/etherpad/src/static/css/framedpage.css create mode 100644 trunk/etherpad/src/static/css/global-pro-account.css create mode 100644 trunk/etherpad/src/static/css/home-opensource.css create mode 100644 trunk/etherpad/src/static/css/home.css create mode 100644 trunk/etherpad/src/static/css/lib/jquery.contextmenu.css create mode 100644 trunk/etherpad/src/static/css/pad.css create mode 100644 trunk/etherpad/src/static/css/pad2_ejs.css create mode 100644 trunk/etherpad/src/static/css/pne-manual.css create mode 100644 trunk/etherpad/src/static/css/pricing.css create mode 100644 trunk/etherpad/src/static/css/pro-signup.css create mode 100644 trunk/etherpad/src/static/css/pro/account.css create mode 100644 trunk/etherpad/src/static/css/pro/framedpage-pro.css create mode 100644 trunk/etherpad/src/static/css/pro/padlist.css create mode 100644 trunk/etherpad/src/static/css/pro/payment-required.css create mode 100644 trunk/etherpad/src/static/css/pro/pro-admin.css create mode 100644 trunk/etherpad/src/static/css/pro/pro-home.css create mode 100644 trunk/etherpad/src/static/css/stats.css create mode 100644 trunk/etherpad/src/static/css/store/eepnet-checkout.css create mode 100644 trunk/etherpad/src/static/css/store/ondemand-billing.css create mode 100644 trunk/etherpad/src/static/css/store/store.css create mode 100644 trunk/etherpad/src/static/favicon.ico create mode 100644 trunk/etherpad/src/static/img/about/appjet-logo-large.gif create mode 100644 trunk/etherpad/src/static/img/about/appjet-logo-medium.png create mode 100644 trunk/etherpad/src/static/img/about/investors/mitchkapor.jpg create mode 100644 trunk/etherpad/src/static/img/about/investors/pb.jpg create mode 100644 trunk/etherpad/src/static/img/about/investors/pg.jpg create mode 100644 trunk/etherpad/src/static/img/about/investors/sanjeev.jpg create mode 100644 trunk/etherpad/src/static/img/about/investors/seth.jpg create mode 100644 trunk/etherpad/src/static/img/about/people/aaron-david-iphones-thumb.jpg create mode 100644 trunk/etherpad/src/static/img/about/people/aaron-david-iphones.jpg create mode 100644 trunk/etherpad/src/static/img/about/people/aaron-google-air.jpg create mode 100644 trunk/etherpad/src/static/img/about/people/aaron-headshot-thumb.jpg create mode 100644 trunk/etherpad/src/static/img/about/people/aaron-headshot.jpg create mode 100644 trunk/etherpad/src/static/img/about/people/aaron-headshot2-thumb.jpg create mode 100644 trunk/etherpad/src/static/img/about/people/aaron-headshot2.jpg create mode 100644 trunk/etherpad/src/static/img/about/people/aaron-headshot3-thumb.jpg create mode 100644 trunk/etherpad/src/static/img/about/people/aaron-headshot3.jpg create mode 100644 trunk/etherpad/src/static/img/about/people/daniel-headshot-thumb.jpg create mode 100644 trunk/etherpad/src/static/img/about/people/david-headshot-thumb.jpg create mode 100644 trunk/etherpad/src/static/img/about/people/david-headshot.jpg create mode 100644 trunk/etherpad/src/static/img/about/people/davy-headshot.jpg create mode 100644 trunk/etherpad/src/static/img/about/people/jd-headshot-thumb.jpg create mode 100644 trunk/etherpad/src/static/img/about/people/jd-headshot.jpg create mode 100644 trunk/etherpad/src/static/img/about/people/rhonda-headshot-thumb.jpg create mode 100644 trunk/etherpad/src/static/img/about/people/rhonda-headshot.jpg create mode 100644 trunk/etherpad/src/static/img/about/pier38.png create mode 100644 trunk/etherpad/src/static/img/about/quote-close.png create mode 100644 trunk/etherpad/src/static/img/about/quote-open.png create mode 100644 trunk/etherpad/src/static/img/about/screencastpreview800x600.jpg create mode 100644 trunk/etherpad/src/static/img/account/betawarn.jpg create mode 100644 trunk/etherpad/src/static/img/acecarets/000000.gif create mode 100644 trunk/etherpad/src/static/img/acecarets/666666.gif create mode 100644 trunk/etherpad/src/static/img/acecarets/999999.gif create mode 100644 trunk/etherpad/src/static/img/acecarets/default.gif create mode 100644 trunk/etherpad/src/static/img/apr09/backgrad.png create mode 100644 trunk/etherpad/src/static/img/apr09/black35.png create mode 100644 trunk/etherpad/src/static/img/apr09/blank.gif create mode 100644 trunk/etherpad/src/static/img/apr09/modalbar.gif create mode 100644 trunk/etherpad/src/static/img/apr09/newpadicon.gif create mode 100644 trunk/etherpad/src/static/img/apr09/shadbot.png create mode 100644 trunk/etherpad/src/static/img/apr09/shadleft.png create mode 100644 trunk/etherpad/src/static/img/apr09/shadleftbot.png create mode 100644 trunk/etherpad/src/static/img/apr09/shadlefttop.png create mode 100644 trunk/etherpad/src/static/img/apr09/shadright.png create mode 100644 trunk/etherpad/src/static/img/apr09/shadrightbot.png create mode 100644 trunk/etherpad/src/static/img/apr09/shadrighttop.png create mode 100644 trunk/etherpad/src/static/img/apr09/topbar.gif create mode 100644 trunk/etherpad/src/static/img/apr09/topbarlogo.gif create mode 100644 trunk/etherpad/src/static/img/apr09/widthfull.gif create mode 100644 trunk/etherpad/src/static/img/apr09/widthfullactive.gif create mode 100644 trunk/etherpad/src/static/img/apr09/widthlim.gif create mode 100644 trunk/etherpad/src/static/img/apr09/widthlimactive.gif create mode 100644 trunk/etherpad/src/static/img/billing/amex.gif create mode 100644 trunk/etherpad/src/static/img/billing/creditcard.gif create mode 100644 trunk/etherpad/src/static/img/billing/csc-help.gif create mode 100644 trunk/etherpad/src/static/img/billing/disc.gif create mode 100644 trunk/etherpad/src/static/img/billing/invoice.gif create mode 100644 trunk/etherpad/src/static/img/billing/mc.gif create mode 100644 trunk/etherpad/src/static/img/billing/paypal.gif create mode 100644 trunk/etherpad/src/static/img/billing/visa.gif create mode 100644 trunk/etherpad/src/static/img/blog/posts/new-features/fullwidth.gif create mode 100644 trunk/etherpad/src/static/img/blog/posts/new-features/importexport.gif create mode 100644 trunk/etherpad/src/static/img/blog/posts/new-features/richtext.gif create mode 100644 trunk/etherpad/src/static/img/blog/posts/new-features/viewzoom.gif create mode 100644 trunk/etherpad/src/static/img/blog/posts/pricing-survey-results.png create mode 100644 trunk/etherpad/src/static/img/blog/posts/pricing-survey.png create mode 100644 trunk/etherpad/src/static/img/blog/posts/time-slider-screenshot.gif create mode 100644 trunk/etherpad/src/static/img/davy/bg/home-createpad.png create mode 100644 trunk/etherpad/src/static/img/davy/bg/home-features-bottom.gif create mode 100644 trunk/etherpad/src/static/img/davy/bg/home-features-free-bottom.gif create mode 100644 trunk/etherpad/src/static/img/davy/bg/home-features-paid-top.gif create mode 100644 trunk/etherpad/src/static/img/davy/bg/home-features-top.gif create mode 100644 trunk/etherpad/src/static/img/davy/bg/home-nav-selected.png create mode 100644 trunk/etherpad/src/static/img/davy/bg/home-screencast.png create mode 100644 trunk/etherpad/src/static/img/davy/bg/home2.png create mode 100644 trunk/etherpad/src/static/img/davy/bg/product-nav-selected-white.png create mode 100644 trunk/etherpad/src/static/img/davy/bg/product-nav-selected.png create mode 100644 trunk/etherpad/src/static/img/davy/bg/product.png create mode 100644 trunk/etherpad/src/static/img/davy/btn/createpad-home.gif create mode 100644 trunk/etherpad/src/static/img/davy/btn/createpad-large.gif create mode 100644 trunk/etherpad/src/static/img/davy/btn/createpad-small.gif create mode 100644 trunk/etherpad/src/static/img/davy/btn/intro-screencast.png create mode 100644 trunk/etherpad/src/static/img/davy/btn/intro-testimonials.png create mode 100644 trunk/etherpad/src/static/img/davy/btn/learnmore.gif create mode 100644 trunk/etherpad/src/static/img/davy/btn/signup-home-2.gif create mode 100644 trunk/etherpad/src/static/img/davy/btn/signup-home-3.gif create mode 100644 trunk/etherpad/src/static/img/davy/btn/signup-home-4.gif create mode 100644 trunk/etherpad/src/static/img/davy/btn/signup-home.gif create mode 100644 trunk/etherpad/src/static/img/davy/btn/uses-more.gif create mode 100644 trunk/etherpad/src/static/img/davy/gfx/32/114.png create mode 100644 trunk/etherpad/src/static/img/davy/gfx/32/15.png create mode 100644 trunk/etherpad/src/static/img/davy/gfx/32/65.png create mode 100644 trunk/etherpad/src/static/img/davy/gfx/32/78.png create mode 100644 trunk/etherpad/src/static/img/davy/gfx/bullet.gif create mode 100644 trunk/etherpad/src/static/img/davy/gfx/home-logo2.gif create mode 100644 trunk/etherpad/src/static/img/davy/gfx/home-screencast.png create mode 100644 trunk/etherpad/src/static/img/davy/gfx/plane.gif create mode 100644 trunk/etherpad/src/static/img/davy/gfx/product-logo.gif create mode 100644 trunk/etherpad/src/static/img/davy/gfx/screenshot.gif create mode 100644 trunk/etherpad/src/static/img/davy/gfx/use-meetings.gif create mode 100644 trunk/etherpad/src/static/img/davy/gfx/use-meetings.png create mode 100644 trunk/etherpad/src/static/img/davy/gfx/use-programming.gif create mode 100644 trunk/etherpad/src/static/img/davy/gfx/use-programming.png create mode 100644 trunk/etherpad/src/static/img/davy/gfx/use-writing.gif create mode 100644 trunk/etherpad/src/static/img/davy/gfx/use-writing.png create mode 100644 trunk/etherpad/src/static/img/davy/txt/home-button.gif create mode 100644 trunk/etherpad/src/static/img/featuretour/code.gif create mode 100644 trunk/etherpad/src/static/img/featuretour/edits.gif create mode 100644 trunk/etherpad/src/static/img/featuretour/editsandusers.gif create mode 100644 trunk/etherpad/src/static/img/featuretour/padlock.png create mode 100644 trunk/etherpad/src/static/img/featuretour/revisions.gif create mode 100644 trunk/etherpad/src/static/img/featuretour/users.gif create mode 100644 trunk/etherpad/src/static/img/feb09/framedheaderback.gif create mode 100644 trunk/etherpad/src/static/img/feb09/framedheaderlogo.gif create mode 100644 trunk/etherpad/src/static/img/feb09/home_firstp.gif create mode 100644 trunk/etherpad/src/static/img/feb09/home_firstp.png create mode 100644 trunk/etherpad/src/static/img/feb09/home_firstp2.gif create mode 100644 trunk/etherpad/src/static/img/feb09/home_h1.gif create mode 100644 trunk/etherpad/src/static/img/feb09/home_h1.png create mode 100644 trunk/etherpad/src/static/img/feb09/home_newpadbutton.gif create mode 100644 trunk/etherpad/src/static/img/feb09/home_newpadbutton.png create mode 100644 trunk/etherpad/src/static/img/feb09/home_newpadbutton2.gif create mode 100644 trunk/etherpad/src/static/img/feb09/home_newpadbutton_eepnet.gif create mode 100644 trunk/etherpad/src/static/img/feb09/hometop_back.gif create mode 100644 trunk/etherpad/src/static/img/feb09/nav1.gif create mode 100644 trunk/etherpad/src/static/img/feb09/nav1_back.gif create mode 100644 trunk/etherpad/src/static/img/feb09/nav2.gif create mode 100644 trunk/etherpad/src/static/img/feb09/screencast.gif create mode 100644 trunk/etherpad/src/static/img/home/etherpad-mainheader1.jpg create mode 100644 trunk/etherpad/src/static/img/home/headergradient.gif create mode 100644 trunk/etherpad/src/static/img/home/homeheader1.jpg create mode 100644 trunk/etherpad/src/static/img/home/homeheader2.jpg create mode 100644 trunk/etherpad/src/static/img/home/leftgrad.gif create mode 100644 trunk/etherpad/src/static/img/home/pencilpaperback.png create mode 100644 trunk/etherpad/src/static/img/home/screencapture1.gif create mode 100644 trunk/etherpad/src/static/img/home/underdevicon.gif create mode 100644 trunk/etherpad/src/static/img/icon/downarrow.gif create mode 100644 trunk/etherpad/src/static/img/icon/feed.gif create mode 100644 trunk/etherpad/src/static/img/jun09/pad/backgrad.gif create mode 100644 trunk/etherpad/src/static/img/jun09/pad/bottomareagfx.gif create mode 100644 trunk/etherpad/src/static/img/jun09/pad/colorpicker.gif create mode 100644 trunk/etherpad/src/static/img/jun09/pad/connectingbar.gif create mode 100644 trunk/etherpad/src/static/img/jun09/pad/connectionindicator.gif create mode 100644 trunk/etherpad/src/static/img/jun09/pad/docbarstates.png create mode 100644 trunk/etherpad/src/static/img/jun09/pad/docbarstates2.png create mode 100644 trunk/etherpad/src/static/img/jun09/pad/docbarstates3.png create mode 100644 trunk/etherpad/src/static/img/jun09/pad/docpaneledge.png create mode 100644 trunk/etherpad/src/static/img/jun09/pad/docpaneledge2.png create mode 100644 trunk/etherpad/src/static/img/jun09/pad/docpanelmiddle.png create mode 100644 trunk/etherpad/src/static/img/jun09/pad/docpanelmiddle2.png create mode 100644 trunk/etherpad/src/static/img/jun09/pad/editbar.gif create mode 100644 trunk/etherpad/src/static/img/jun09/pad/editbar2.gif create mode 100644 trunk/etherpad/src/static/img/jun09/pad/editbar3.png create mode 100644 trunk/etherpad/src/static/img/jun09/pad/editbar3.xcf create mode 100644 trunk/etherpad/src/static/img/jun09/pad/editbarback.gif create mode 100644 trunk/etherpad/src/static/img/jun09/pad/feedbackbox2.gif create mode 100644 trunk/etherpad/src/static/img/jun09/pad/fileicons.gif create mode 100644 trunk/etherpad/src/static/img/jun09/pad/hdraggie.gif create mode 100644 trunk/etherpad/src/static/img/jun09/pad/inviteshare.gif create mode 100644 trunk/etherpad/src/static/img/jun09/pad/inviteshare2.gif create mode 100644 trunk/etherpad/src/static/img/jun09/pad/layoutbuttons.gif create mode 100644 trunk/etherpad/src/static/img/jun09/pad/overlay.png create mode 100644 trunk/etherpad/src/static/img/jun09/pad/overlay2.png create mode 100644 trunk/etherpad/src/static/img/jun09/pad/padtop.gif create mode 100644 trunk/etherpad/src/static/img/jun09/pad/padtop2.gif create mode 100644 trunk/etherpad/src/static/img/jun09/pad/padtop3.gif create mode 100644 trunk/etherpad/src/static/img/jun09/pad/padtop4.gif create mode 100644 trunk/etherpad/src/static/img/jun09/pad/padtop4.png create mode 100644 trunk/etherpad/src/static/img/jun09/pad/padtop4.xcf create mode 100644 trunk/etherpad/src/static/img/jun09/pad/padtop5.png create mode 100644 trunk/etherpad/src/static/img/jun09/pad/padtop5.xcf create mode 100644 trunk/etherpad/src/static/img/jun09/pad/padtopback.gif create mode 100644 trunk/etherpad/src/static/img/jun09/pad/padtopback2.gif create mode 100644 trunk/etherpad/src/static/img/jun09/pad/protop.png create mode 100644 trunk/etherpad/src/static/img/jun09/pad/protop.xcf create mode 100644 trunk/etherpad/src/static/img/jun09/pad/public.gif create mode 100644 trunk/etherpad/src/static/img/jun09/pad/savedrevarrows.gif create mode 100644 trunk/etherpad/src/static/img/jun09/pad/savedrevsgfx2.gif create mode 100644 trunk/etherpad/src/static/img/jun09/pad/sharebox2.gif create mode 100644 trunk/etherpad/src/static/img/jun09/pad/sharebox3.gif create mode 100644 trunk/etherpad/src/static/img/jun09/pad/sharebox4.gif create mode 100644 trunk/etherpad/src/static/img/jun09/pad/sharedistri.gif create mode 100644 trunk/etherpad/src/static/img/jun09/pad/syncdone.gif create mode 100644 trunk/etherpad/src/static/img/jun09/pad/syncing.gif create mode 100644 trunk/etherpad/src/static/img/jun09/pad/syncing2.gif create mode 100644 trunk/etherpad/src/static/img/jun09/pad/viewbargfx.gif create mode 100644 trunk/etherpad/src/static/img/lib/jquery.contextmenu.images/cmenu-gloss-cyan-menu-item-hover.gif create mode 100644 trunk/etherpad/src/static/img/lib/jquery.contextmenu.images/cmenu-gloss-menu-item-hover.gif create mode 100644 trunk/etherpad/src/static/img/lib/jquery.contextmenu.images/cmenu-gloss-semitransparent-menu-item-hover.png create mode 100644 trunk/etherpad/src/static/img/lib/jquery.contextmenu.images/cmenu-human-menu-item-hover.gif create mode 100644 trunk/etherpad/src/static/img/lib/jquery.contextmenu.images/cmenu-osx-menu-item-hover.gif create mode 100644 trunk/etherpad/src/static/img/lib/jquery.contextmenu.images/cmenu-vista-bg.gif create mode 100644 trunk/etherpad/src/static/img/lib/jquery.contextmenu.images/cmenu-vista-menu-item-hover.gif create mode 100644 trunk/etherpad/src/static/img/lib/jquery.contextmenu.images/cmenu-xp-bg.gif create mode 100644 trunk/etherpad/src/static/img/may09/bold.gif create mode 100644 trunk/etherpad/src/static/img/may09/doc.gif create mode 100644 trunk/etherpad/src/static/img/may09/doc.png create mode 100644 trunk/etherpad/src/static/img/may09/html.gif create mode 100644 trunk/etherpad/src/static/img/may09/html.png create mode 100644 trunk/etherpad/src/static/img/may09/italic.gif create mode 100644 trunk/etherpad/src/static/img/may09/leftarrow.gif create mode 100644 trunk/etherpad/src/static/img/may09/leftarrow2.gif create mode 100644 trunk/etherpad/src/static/img/may09/link.gif create mode 100644 trunk/etherpad/src/static/img/may09/link.png create mode 100644 trunk/etherpad/src/static/img/may09/odt.gif create mode 100644 trunk/etherpad/src/static/img/may09/odt.png create mode 100644 trunk/etherpad/src/static/img/may09/padlock.gif create mode 100644 trunk/etherpad/src/static/img/may09/padlockopen.gif create mode 100644 trunk/etherpad/src/static/img/may09/passwordlocked.gif create mode 100644 trunk/etherpad/src/static/img/may09/passwordlocked_cropped.gif create mode 100644 trunk/etherpad/src/static/img/may09/passwordnone.gif create mode 100644 trunk/etherpad/src/static/img/may09/paypal.gif create mode 100644 trunk/etherpad/src/static/img/may09/pdf.gif create mode 100644 trunk/etherpad/src/static/img/may09/pdf.png create mode 100644 trunk/etherpad/src/static/img/may09/redo.gif create mode 100644 trunk/etherpad/src/static/img/may09/txt.gif create mode 100644 trunk/etherpad/src/static/img/may09/txt.png create mode 100644 trunk/etherpad/src/static/img/may09/underline.gif create mode 100644 trunk/etherpad/src/static/img/may09/undo.gif create mode 100644 trunk/etherpad/src/static/img/miniplane.gif create mode 100644 trunk/etherpad/src/static/img/misc/diagnostic-links.gif create mode 100644 trunk/etherpad/src/static/img/misc/status-ball.gif create mode 100644 trunk/etherpad/src/static/img/misc/traclogo.gif create mode 100644 trunk/etherpad/src/static/img/oct/atlonglast.gif create mode 100644 trunk/etherpad/src/static/img/oct/banner1.jpg create mode 100644 trunk/etherpad/src/static/img/oct/banner2.jpg create mode 100644 trunk/etherpad/src/static/img/oct/banner3.jpg create mode 100644 trunk/etherpad/src/static/img/oct/banner4.jpg create mode 100644 trunk/etherpad/src/static/img/oct/banner5.gif create mode 100644 trunk/etherpad/src/static/img/oct/banner6.gif create mode 100644 trunk/etherpad/src/static/img/oct/banner7.gif create mode 100644 trunk/etherpad/src/static/img/oct/banner8.gif create mode 100644 trunk/etherpad/src/static/img/oct/banner9.gif create mode 100644 trunk/etherpad/src/static/img/oct/bannerback5.gif create mode 100644 trunk/etherpad/src/static/img/oct/bannerback6.gif create mode 100644 trunk/etherpad/src/static/img/oct/bodyback1.gif create mode 100644 trunk/etherpad/src/static/img/oct/bodyback2.gif create mode 100644 trunk/etherpad/src/static/img/oct/bodyback3.gif create mode 100644 trunk/etherpad/src/static/img/oct/bodyback4.gif create mode 100644 trunk/etherpad/src/static/img/oct/bodyback5.gif create mode 100644 trunk/etherpad/src/static/img/oct/bodybacktop1.gif create mode 100644 trunk/etherpad/src/static/img/oct/computers.gif create mode 100644 trunk/etherpad/src/static/img/oct/computers2.gif create mode 100644 trunk/etherpad/src/static/img/oct/glossyblue.gif create mode 100644 trunk/etherpad/src/static/img/oct/glossyblue2.gif create mode 100644 trunk/etherpad/src/static/img/oct/glossyblueh.gif create mode 100644 trunk/etherpad/src/static/img/oct/insetrect.gif create mode 100644 trunk/etherpad/src/static/img/oct/minilogo1-05e.gif create mode 100644 trunk/etherpad/src/static/img/oct/minilogo1-07f.gif create mode 100644 trunk/etherpad/src/static/img/oct/minilogo3.jpg create mode 100644 trunk/etherpad/src/static/img/oct/minitopback1.gif create mode 100644 trunk/etherpad/src/static/img/oct/minitopback2.gif create mode 100644 trunk/etherpad/src/static/img/oct/minitopbar1-05e.gif create mode 100644 trunk/etherpad/src/static/img/oct/minitopbar2-05e.gif create mode 100644 trunk/etherpad/src/static/img/oct/minitopbar2-07f.gif create mode 100644 trunk/etherpad/src/static/img/oct/minitopbar3.jpg create mode 100644 trunk/etherpad/src/static/img/oct/minitopbar4.gif create mode 100644 trunk/etherpad/src/static/img/oct/minitoplogo1.gif create mode 100644 trunk/etherpad/src/static/img/oct/minitoplogo2.gif create mode 100644 trunk/etherpad/src/static/img/oct/newpadmain.gif create mode 100644 trunk/etherpad/src/static/img/oct/newpadmainback.gif create mode 100644 trunk/etherpad/src/static/img/oct/newpadmainbackh.gif create mode 100644 trunk/etherpad/src/static/img/oct/pageshot.png create mode 100644 trunk/etherpad/src/static/img/oct/pageshotmini.png create mode 100644 trunk/etherpad/src/static/img/oct/sidehead-gradhilite.gif create mode 100644 trunk/etherpad/src/static/img/oct/tinytriangle.gif create mode 100644 trunk/etherpad/src/static/img/oct/topnav1.gif create mode 100644 trunk/etherpad/src/static/img/oct/topnav2.gif create mode 100644 trunk/etherpad/src/static/img/oct/topnav3.gif create mode 100644 trunk/etherpad/src/static/img/oct/topnav4.gif create mode 100644 trunk/etherpad/src/static/img/oct/topnav5.gif create mode 100644 trunk/etherpad/src/static/img/oct/topnav6.gif create mode 100644 trunk/etherpad/src/static/img/oct/topnavback1.gif create mode 100644 trunk/etherpad/src/static/img/oct/topnavback2.gif create mode 100644 trunk/etherpad/src/static/img/oct/topnavback3.gif create mode 100644 trunk/etherpad/src/static/img/oct/usecasesnavdown.gif create mode 100644 trunk/etherpad/src/static/img/oct/usecasesnavdownh.gif create mode 100644 trunk/etherpad/src/static/img/oct/usecasesnavup.gif create mode 100644 trunk/etherpad/src/static/img/oct/usecasesnavuph.gif create mode 100644 trunk/etherpad/src/static/img/oct/watchscreencast.gif create mode 100644 trunk/etherpad/src/static/img/pad/animated-orb-orange-12.gif create mode 100644 trunk/etherpad/src/static/img/pad/backgrad.png create mode 100644 trunk/etherpad/src/static/img/pad/backshadow/backshadow-940-20-eee-20.gif create mode 100644 trunk/etherpad/src/static/img/pad/backshadow/backshadow-940-20-fff-20.gif create mode 100644 trunk/etherpad/src/static/img/pad/backshadow/backshadow-940-20-fff-40.gif create mode 100644 trunk/etherpad/src/static/img/pad/backshadow/backshadow-940-20-fff-60.gif create mode 100644 trunk/etherpad/src/static/img/pad/backshadow/botshadow-940-20-eee-20.gif create mode 100644 trunk/etherpad/src/static/img/pad/etherpad-logo-small-grad.gif create mode 100644 trunk/etherpad/src/static/img/pad/etherpad-logo-small.gif create mode 100644 trunk/etherpad/src/static/img/pad/etherpad-logo-small2.gif create mode 100644 trunk/etherpad/src/static/img/pad/expandy-arrow-down.gif create mode 100644 trunk/etherpad/src/static/img/pad/expandy-arrow-right.gif create mode 100644 trunk/etherpad/src/static/img/pad/expandy-arrow6-down-active.gif create mode 100644 trunk/etherpad/src/static/img/pad/expandy-arrow6-down.gif create mode 100644 trunk/etherpad/src/static/img/pad/expandy-arrow6-right-active.gif create mode 100644 trunk/etherpad/src/static/img/pad/expandy-arrow6-right.gif create mode 100644 trunk/etherpad/src/static/img/pad/header-revgrad.gif create mode 100644 trunk/etherpad/src/static/img/pad/newpad.gif create mode 100644 trunk/etherpad/src/static/img/pad/orb-greenred-12.gif create mode 100644 trunk/etherpad/src/static/img/pad/padbg1.jpg create mode 100644 trunk/etherpad/src/static/img/pad/padbg2.jpg create mode 100644 trunk/etherpad/src/static/img/pad/padbg3.jpg create mode 100644 trunk/etherpad/src/static/img/pad/padbg4.jpg create mode 100644 trunk/etherpad/src/static/img/pad/padbg5.jpg create mode 100644 trunk/etherpad/src/static/img/pad/padhead1.jpg create mode 100644 trunk/etherpad/src/static/img/pad/padhead2.jpg create mode 100644 trunk/etherpad/src/static/img/pad/padhead3.jpg create mode 100644 trunk/etherpad/src/static/img/pad/pencil-icon-small-blue.gif create mode 100644 trunk/etherpad/src/static/img/pad/sidehead-grad.gif create mode 100644 trunk/etherpad/src/static/img/pad/timeslider/button_depressed.png create mode 100644 trunk/etherpad/src/static/img/pad/timeslider/button_undepressed.png create mode 100644 trunk/etherpad/src/static/img/pad/timeslider/crushed_button_depressed.png create mode 100644 trunk/etherpad/src/static/img/pad/timeslider/crushed_button_undepressed.png create mode 100644 trunk/etherpad/src/static/img/pad/timeslider/crushed_current_location.png create mode 100644 trunk/etherpad/src/static/img/pad/timeslider/crushed_pause.png create mode 100644 trunk/etherpad/src/static/img/pad/timeslider/crushed_play.png create mode 100644 trunk/etherpad/src/static/img/pad/timeslider/crushed_play_button.png create mode 100644 trunk/etherpad/src/static/img/pad/timeslider/crushed_timeslider_mockup.png create mode 100644 trunk/etherpad/src/static/img/pad/timeslider/current_location.gif create mode 100644 trunk/etherpad/src/static/img/pad/timeslider/current_location.png create mode 100644 trunk/etherpad/src/static/img/pad/timeslider/pause.gif create mode 100644 trunk/etherpad/src/static/img/pad/timeslider/pause.png create mode 100644 trunk/etherpad/src/static/img/pad/timeslider/play.gif create mode 100644 trunk/etherpad/src/static/img/pad/timeslider/play.png create mode 100644 trunk/etherpad/src/static/img/pad/timeslider/play_button.png create mode 100644 trunk/etherpad/src/static/img/pad/timeslider/star.gif create mode 100644 trunk/etherpad/src/static/img/pad/timeslider/star.png create mode 100644 trunk/etherpad/src/static/img/pad/timeslider/star_selected.png create mode 100644 trunk/etherpad/src/static/img/pad/timeslider/stepper_buttons.png create mode 100644 trunk/etherpad/src/static/img/pad/timeslider/timeslider_background.png create mode 100644 trunk/etherpad/src/static/img/pad/timeslider/timeslider_left.png create mode 100644 trunk/etherpad/src/static/img/pad/timeslider/timeslider_mockup.png create mode 100644 trunk/etherpad/src/static/img/pad/timeslider/timeslider_right.png create mode 100644 trunk/etherpad/src/static/img/pricing/free.gif create mode 100644 trunk/etherpad/src/static/img/pricing/group.gif create mode 100644 trunk/etherpad/src/static/img/pricing/on-demand.gif create mode 100644 trunk/etherpad/src/static/img/pricing/private-network.gif create mode 100644 trunk/etherpad/src/static/img/pricing/support.gif create mode 100644 trunk/etherpad/src/static/img/pro/billing/cards-button.gif create mode 100644 trunk/etherpad/src/static/img/pro/box/blue-boxtop.gif create mode 100644 trunk/etherpad/src/static/img/pro/buttons/bluebutton120.gif create mode 100644 trunk/etherpad/src/static/img/pro/header/pro-header-back.gif create mode 100644 trunk/etherpad/src/static/img/pro/header/pro-header-logo.png create mode 100644 trunk/etherpad/src/static/img/pro/header/pro-header-logo.xcf create mode 100644 trunk/etherpad/src/static/img/pro/header/pro-header-plustopnav-back.gif create mode 100644 trunk/etherpad/src/static/img/pro/padlist/gear-drop.gif create mode 100644 trunk/etherpad/src/static/img/pro/padlist/paper-icon.gif create mode 100644 trunk/etherpad/src/static/img/pro/padlist/trash-icon.gif create mode 100644 trunk/etherpad/src/static/img/pro/topnav/pro-topnav-back.gif create mode 100644 trunk/etherpad/src/static/img/pro/topnav/pro-topnav-notch.gif create mode 100644 trunk/etherpad/src/static/img/tinyplane.gif create mode 100644 trunk/etherpad/src/static/img/wavejet.jpg create mode 100644 trunk/etherpad/src/static/js/ace.js create mode 100644 trunk/etherpad/src/static/js/billing.js create mode 100644 trunk/etherpad/src/static/js/billing_shared.js create mode 100644 trunk/etherpad/src/static/js/broadcast.js create mode 100644 trunk/etherpad/src/static/js/broadcast_revisions.js create mode 100644 trunk/etherpad/src/static/js/broadcast_slider.js create mode 100644 trunk/etherpad/src/static/js/collab_client.js create mode 100644 trunk/etherpad/src/static/js/colorutils.js create mode 100644 trunk/etherpad/src/static/js/confirmation.js create mode 100644 trunk/etherpad/src/static/js/connection_diagnostics.js create mode 100644 trunk/etherpad/src/static/js/cssmanager_client.js create mode 100644 trunk/etherpad/src/static/js/domline_client.js create mode 100644 trunk/etherpad/src/static/js/draggable.js create mode 100644 trunk/etherpad/src/static/js/easysync2_client.js create mode 100644 trunk/etherpad/src/static/js/etherpad.js create mode 100755 trunk/etherpad/src/static/js/jquery-1.2.6.js create mode 100644 trunk/etherpad/src/static/js/jquery-1.3.2.js create mode 100644 trunk/etherpad/src/static/js/json2.js create mode 100644 trunk/etherpad/src/static/js/lib/jquery.contextmenu.js create mode 100644 trunk/etherpad/src/static/js/linestylefilter_client.js create mode 100644 trunk/etherpad/src/static/js/pad.js.old create mode 100644 trunk/etherpad/src/static/js/pad2.js create mode 100644 trunk/etherpad/src/static/js/pad_chat.js create mode 100644 trunk/etherpad/src/static/js/pad_connectionstatus.js create mode 100644 trunk/etherpad/src/static/js/pad_cookie.js create mode 100644 trunk/etherpad/src/static/js/pad_docbar.js create mode 100644 trunk/etherpad/src/static/js/pad_editbar.js create mode 100644 trunk/etherpad/src/static/js/pad_editor.js create mode 100644 trunk/etherpad/src/static/js/pad_impexp.js create mode 100644 trunk/etherpad/src/static/js/pad_modals.js create mode 100644 trunk/etherpad/src/static/js/pad_savedrevs.js create mode 100644 trunk/etherpad/src/static/js/pad_userlist.js create mode 100644 trunk/etherpad/src/static/js/pad_utils.js create mode 100644 trunk/etherpad/src/static/js/pricing.js create mode 100644 trunk/etherpad/src/static/js/pro/guest-knock-client.js create mode 100644 trunk/etherpad/src/static/js/pro/pro-padlist-client.js create mode 100644 trunk/etherpad/src/static/js/pro/signin-client.js create mode 100644 trunk/etherpad/src/static/js/pulse.jquery.js create mode 100644 trunk/etherpad/src/static/js/statpage.js create mode 100644 trunk/etherpad/src/static/js/store.js create mode 100644 trunk/etherpad/src/static/js/swfobject.js create mode 100644 trunk/etherpad/src/static/js/timeslider.js create mode 100644 trunk/etherpad/src/static/js/undo-xpopup.js create mode 100755 trunk/etherpad/src/static/swf/vidplayer.swf (limited to 'trunk/etherpad/src/static') diff --git a/trunk/etherpad/src/static/crossdomain.xml b/trunk/etherpad/src/static/crossdomain.xml new file mode 100644 index 0000000..9e76390 --- /dev/null +++ b/trunk/etherpad/src/static/crossdomain.xml @@ -0,0 +1,12 @@ + + + + + + + + + + + diff --git a/trunk/etherpad/src/static/css/admin/admin-stats.css b/trunk/etherpad/src/static/css/admin/admin-stats.css new file mode 100644 index 0000000..94e0d19 --- /dev/null +++ b/trunk/etherpad/src/static/css/admin/admin-stats.css @@ -0,0 +1,183 @@ +#backtoadmin { + color: #88f; + padding: 4px; + text-decoration: none; +} + +#topnav { + margin-top: .5em; + margin-bottom: 1em; + font-family: Verdana, sans-serif; + font-size: 1.2em; +} + +#topnav ul { + padding: 0; + margin: 0 0 0 12px; +} + +#topnav ul li { + float: left; + display: inline; +} +#topnav ul li a { + display: block; + padding: .4em 1em; + text-decoration: none; + color: blue; +} +#topnav ul li.selected a { + background: #fff; + color: black; + border-bottom: 1px solid black; +} + +/* ----- */ + +/*.statbox { + display: box; + overflow: hidden; + padding-left: 8px; +} +*/ + +.latesttable { + border-top: 1px solid #ccc; + border-left: 1px solid #ccc; +} + +.latesttable td { + border-right: 1px solid #ccc; + border-bottom: 1px solid #ccc; + padding: 2px 6px; +} + +/* +.statbox table td span { } + +.statbox .stat-title { + display: block; + font-family: Verdana, sans-serif; + font-size: 1.4em; + text-decoration: none; + border-bottom: 1px solid #bbb; + margin-top: 1em; +} + +.statbox .stat-table { + float: left; + padding: 4px; +} +.statbox .stat-graph { + float: left; +} +*/ +form#statprefs { + background: #eee; + padding: 1em; + border-top: 1px solid #ccc; + border-bottom: 1px solid #ccc; + margin-top: 1em; +} + +a.viewall { + margin-left: 8px; +} + +div.statentry { +/* width: 800px;*/ + border: 1px solid #060; + background: #afa; + margin: 1em; +} + +body { + margin: 0; + min-width: 800px; +} + +div.warning { + background: #ffa; + border: 1px solid #630; +} + +div.error { + background: #faa; + border: 1px solid #600; +} + +.statentry h2 { + font-size: 13pt; + font-family: sans-serif; + background: #0a0; + color: white; + padding: 5px; + margin: 0; + cursor: pointer; +} + +.statentry h3 { + font-size: 13pt; + font-family: sans-serif; + font-weight: normal; + margin: 3px; + padding: 0; +} + +.statentry h4 { + font-size: 12pt; + font-weight: bold; + margin: 3px; +} + +.statentry h2:hover { + text-decoration: underline; +} + +.warning h2 { + background: #ea0; +} + +.error h2 { + background: #a00; +} + +.statentry table { + width: 100%; +} + +.statentry .graph { + background: white; + padding: 2px; + width: 600px; +} + +.graph .datalinks { + margin-top: 10px; + font-size: .8em; + text-align: right; + color: gray; +} + +.graph .datalinks a { + color: gray; +} + +.statentry .latest { + background: white; + vertical-align: top; + font-size:; +} + +.statbody { + display: none; +} + +/*div.categorywrapper { + -moz-column-width: 500px; + -moz-column-gap: 20px; + -webkit-column-width: 500px; + -webkit-column-gap: 20px; + column-width: 500px; + column-gap: 20px; +}*/ \ No newline at end of file diff --git a/trunk/etherpad/src/static/css/beta.css b/trunk/etherpad/src/static/css/beta.css new file mode 100644 index 0000000..afba271 --- /dev/null +++ b/trunk/etherpad/src/static/css/beta.css @@ -0,0 +1,49 @@ +div.beta-signup { } + +div.right { + float: right; + width: 500px; +} +div.left { + width: 224x; + float: left; + text-align: center; + padding: 60px 0 0 80px; +} + +form#beta-signup-form { + border: 1px solid #ccc; + margin: 2em 0; + padding: 1em; + background: #eee; +} + +form#beta-signup-form p { margin: 0; } + +form input { + border: 1px solid #3773c6; + font-size: 14pt; +} + +form button { + border: 0; + cursor: pointer; + color: #fff; + font-weight: bold; + overflow: visible; + padding: 0; + background: #70a4ec; + border: 1px solid #3773c6; + padding: 4px 6px; + margin-top: 4px; +} + +#error-msg { + margin: 0; + padding: .5em; + margin-bottom: .5em; + border: 1px solid red; + background: #fee; + font-weight: bold; +} + diff --git a/trunk/etherpad/src/static/css/broadcast.css b/trunk/etherpad/src/static/css/broadcast.css new file mode 100644 index 0000000..afb65b8 --- /dev/null +++ b/trunk/etherpad/src/static/css/broadcast.css @@ -0,0 +1,386 @@ +*,html.body { margin: 0; padding: 0; } +h1, h2, h3, h4, h5, h6 { display: inline; line-height: 2em; } + +.clear { clear: both; } + +html { font-size: 62.5%; } + +body { background: #ebebeb url(/static/img/jun09/pad/backgrad.gif) repeat-x left top; } +body, textarea { font-family: Arial, sans-serif; } + +#topbar { height: 25px; background: #326cbd url(/static/img/jun09/pad/padtopback2.gif) repeat-x left top; + position: relative; } + +#padpage { margin-left: auto; margin-right: auto; width: 914px; vertical-align: top;} + +#topbarleft { float: left; height: 100%; overflow: hidden; + background: url(/static/img/jun09/pad/padtop4.png) no-repeat left top; width: 5px; } +#topbarright { float: right; height: 100%; overflow: hidden; + background: url(/static/img/jun09/pad/padtop4.png) no-repeat right top; width: 5px; } + + +.propad #topbar { background: #2c2c2c url(/static/img/jun09/pad/protop.png) repeat-x 0 -25px; } +.propad #topbarleft { background: url(/static/img/jun09/pad/protop.png) no-repeat left top; } +.propad #topbarright { background: url(/static/img/jun09/pad/protop.png) no-repeat right top; } + +a#backtoprosite, #accountnav { + display: block; position: absolute; height: 15px; line-height: 15px; + width: auto; top: 5px; font-size: 1.2em; +} +a#backtoprosite, #accountnav a { color: #cde7ff; text-decoration: underline; } +#accountnav { right: 10px; color: #fff; } + + +#topbarcenter { margin-left: 150px; margin-right: 150px; } +a#topbaretherpad { margin-left: auto; margin-right: auto; display: block; width: 127px; + position: relative; top: 0px; height: 0; padding-top: 25px; + background: url(/static/img/jun09/pad/padtop4.png) no-repeat -397px 0px; overflow: hidden; } + +.propad a#topbaretherpad { background: url(/static/img/jun09/pad/protop.png) no-repeat -397px 0px; } + +#padmain { + margin: 7px; + margin-top: 5px; + margin-right: 0px; + padding: 19px; + padding-top:16px; + border: 1px solid rgb(194, 194, 194); + background-color: white; + min-height: 500px; + font-family: Arial, sans-serif; + font-size: 1.2em; + line-height: 17px; + width: 670px; + position: absolute; + top:27px; +} + +/* + * Fancy title bar + */ +#padmain h1 { + font-family: Verdana, sans-serif; + font-size: 1.5em; + font-weight: 400; + display: inline-block; + display: -moz-inline-box; + padding-top: 4px; + padding-bottom: 10px; +} + +#padcontent { + font-size: 0.93em; + line-height: 1.5em; + font-weight: 25; +} + +#titlebar { + margin-bottom: 25px; + height: 20px; + width: auto; +} + +#titlebar #revision { + float: right; + width: auto; + text-align: right; + vertical-align: top; +} + +#revision #revision_label { + font-weight: bold; + font-size: 1.0em; + line-height: 1.4em; +} + +#revision #revision_date { + font-weight: light; + font-size: 0.8em; + color: rgb(184, 184, 184); +} + +#rightbars { + margin-left: 730px; + margin-top: 5px; + margin-bottom: 5px; + margin-right: 7px; + position: absolute; + top:27px; +} + +#rightbar { + width: 143px; + background-color: white; + border: 1px solid rgb(194, 194, 194); + padding: 16px; + padding-top: 13px; + font-size: 1.20em; + line-height: 1.8em; + vertical-align: top; +} + +#rightbars h2 { + font-weight: 700; + font-size: 1.2em; + padding-top: 20px; + padding-bottom: 4px; +} + +#rightbar img { + padding-left: 4px; + padding-right: 8px; + vertical-align: text-bottom; +} +#rightbar a { + color: rgb(50, 132, 213); + text-decoration: none; +} + +#legend { + width: 143px; + background-color: white; + border: 1px solid rgb(194, 194, 194); + padding: 16px; + padding-top: 0px; + font-size: 1.20em; + line-height: 1.8em; + vertical-align: top; + margin-top: 10px; +} +#legend h2 { + padding-top: 10px; +} + +#authorstable { + vertical-align: middle; +} + +#authorstable div.swatch { + width:15px; + height:15px; + margin: 5px; + margin-top:3px; + margin-right: 14px; + border: rgb(149, 149, 149) 1px solid; +} + +#rightbar h2 { + font-weight: 700; + font-size: 1.2em; + padding-top: 20px; + padding-bottom: 4px; +} + +#rightbar a { + color: rgb(50, 132, 213); + text-decoration: none; +} + +#timeslider-wrapper { + position: relative; + left: 0px; + right: 0px; + top: 0px; +} + +#timeslider-left { + position: absolute; + left:-2px; + background-image: url(/static/img/pad/timeslider/timeslider_left.png); + width: 134px; + height: 63px; +} + +#timeslider-right { + position: absolute; + top:0px; + right:-2px; + background-image: url(/static/img/pad/timeslider/timeslider_right.png); + width: 155px; + height: 63px; +} + + +#timeslider { + margin:7px; + margin-bottom: 0px; + width: 894px; + height: 63px; + margin-left: 9px; + margin-right: 9px; + background-image: url(/static/img/pad/timeslider/timeslider_background.png); + position: relative; +} + +div#timeslider #timeslider-slider { + position: absolute; + left: 0px; + top: 1px; + height: 61px; + width: 100%; +} + +div#ui-slider-handle { + width: 13px; + height: 61px; + background-image: url(/static/img/pad/timeslider/crushed_current_location.png); + cursor: pointer; + -moz-user-select: none; + -khtml-user-select: none; + user-select: none; + position: absolute; + top: 0; + left: 0; +} +* html div#ui-slider-handle { /* IE 6/7 */ + background-image: url(/static/img/pad/timeslider/current_location.gif); +} + +div#ui-slider-bar { + position: relative; + margin-right: 148px; + height: 35px; + margin-left: 5px; + top: 20px; + cursor: pointer; + -moz-user-select: none; + -khtml-user-select: none; + user-select: none; + +} + +div#timeslider div#playpause_button { + background-image: url(/static/img/pad/timeslider/crushed_button_undepressed.png); + width: 47px; + height: 47px; + position: absolute; + right: 77px; + top: 9px; +} + +div#timeslider div#playpause_button div#playpause_button_icon { + background-image: url(/static/img/pad/timeslider/play.png); + width: 47px; + height: 47px; + position: absolute; + top :0px; + left:0px; +} +* html div#timeslider div#playpause_button div#playpause_button_icon { + background-image: url(/static/img/pad/timeslider/play.gif); /* IE 6/7 */ +} + +div#timeslider div#playpause_button div.pause#playpause_button_icon { + background-image: url(/static/img/pad/timeslider/pause.png); +} +* html div#timeslider div#playpause_button div.pause#playpause_button_icon { + background-image: url(/static/img/pad/timeslider/pause.gif); /* IE 6/7 */ +} + +div #timeslider div#steppers div#leftstar { + position: absolute; + right: 34px; + top: 8px; + width:30px; + height:21px; + background: url(/static/img/pad/timeslider/stepper_buttons.png) 0px 44px; + overflow:hidden; +} + +div #timeslider div#steppers div#rightstar { + position: absolute; + right: 5px; + top: 8px; + width:29px; + height:21px; + background: url(/static/img/pad/timeslider/stepper_buttons.png) 29px 44px; + overflow:hidden; +} + +div #timeslider div#steppers div#leftstep { + position: absolute; + right: 34px; + top: 33px; + width:30px; + height:21px; + background: url(/static/img/pad/timeslider/stepper_buttons.png) 0px 22px; + overflow:hidden; +} + +div #timeslider div#steppers div#rightstep { + position: absolute; + right: 5px; + top: 33px; + width:29px; + height:21px; + background: url(/static/img/pad/timeslider/stepper_buttons.png) 29px 22px; + overflow:hidden; +} + +#timeslider div.star { + position: absolute; + top: 40px; + background-image: url(/static/img/pad/timeslider/star.png); + width: 15px; + height: 16px; + cursor: pointer; +} +* html #timeslider div.star { + background-image: url(/static/img/pad/timeslider/star.gif); /* IE 6/7 */ +} + +#timeslider div#timer { + position: absolute; + font-family: Arial, sans-serif; + left: 7px; + top: 9px; + width: 122px; + text-align: center; + color: white; + font-size: 11px; +} + +#padcontent ul, ol, li { + padding: 0; + margin: 0; +} +#padcontent ul { margin-left: 1.5em; } +#padcontent ul ul { margin-left: 0 !important; } +#padcontent ul.list-bullet1 { margin-left: 1.5em; } +#padcontent ul.list-bullet2 { margin-left: 3em; } +#padcontent ul.list-bullet3 { margin-left: 4.5em; } +#padcontent ul.list-bullet4 { margin-left: 6em; } +#padcontent ul.list-bullet5 { margin-left: 7.5em; } +#padcontent ul.list-bullet6 { margin-left: 9em; } +#padcontent ul.list-bullet7 { margin-left: 10.5em; } +#padcontent ul.list-bullet8 { margin-left: 12em; } + +#padcontent ul { list-style-type: disc; } +#padcontent ul.list-bullet1 { list-style-type: disc; } +#padcontent ul.list-bullet2 { list-style-type: circle; } +#padcontent ul.list-bullet3 { list-style-type: square; } +#padcontent ul.list-bullet4 { list-style-type: disc; } +#padcontent ul.list-bullet5 { list-style-type: circle; } +#padcontent ul.list-bullet6 { list-style-type: square; } +#padcontent ul.list-bullet7 { list-style-type: disc; } +#padcontent ul.list-bullet8 { list-style-type: circle; } + +#error { + position: absolute; + margin-left: 9px; + top:4px; + left: 0px; + right:9px; +/* width:894px;*/ + height:34px; + background-color: rgb(247, 247, 247); + z-index:10; + text-align: center; + font-family: Verdana; + padding-top: 20px; + font-size: 16px; +} +#error a { + color: rgb(50, 132, 213); + text-decoration: none; +} diff --git a/trunk/etherpad/src/static/css/connection_diagnostics.css b/trunk/etherpad/src/static/css/connection_diagnostics.css new file mode 100644 index 0000000..fc040d0 --- /dev/null +++ b/trunk/etherpad/src/static/css/connection_diagnostics.css @@ -0,0 +1,13 @@ +#content { + text-align: center; +} + +#statusmsg { + font-size: 200%; + color: #444; +} + +#emailform { margin: 2em; padding: 1em; background: #eee; border: 1px solid #999; } +#emailform p { font-size: 200%; color: #444; } +#emailform input { font-size: 200%; margin-bottom: 1em; } +#emailform #email { color: #555; } diff --git a/trunk/etherpad/src/static/css/etherpad.css b/trunk/etherpad/src/static/css/etherpad.css new file mode 100644 index 0000000..70bf464 --- /dev/null +++ b/trunk/etherpad/src/static/css/etherpad.css @@ -0,0 +1,770 @@ +/*----- + Reset +-----*/ + + html, body, div, span, applet, object, iframe, + h1, h2, h3, h4, h5, h6, p, blockquote, pre, + a, abbr, acronym, address, big, cite, code, + del, dfn, em, font, img, ins, kbd, q, s, samp, + small, strike, strong, sub, sup, tt, var, + dl, dt, dd, ol, ul, li, + fieldset, form, label, legend, + table, caption, tbody, tfoot, thead, tr, th, td { + margin: 0; + padding: 0; + border: 0; + outline: 0; + font-weight: inherit; + font-style: inherit; + font-size: 1em; + font-family: inherit; + vertical-align: baseline; + } + :focus { + outline: 0; + } + body { + line-height: 1; + color: #333; + background: #f7f7f7; + font-size: 75%; + } + html>body { + font-size: 12px; + } + ol, ul { + list-style: none; + } + table { + border-collapse: separate; + border-spacing: 0; + } + caption, th, td { + text-align: left; + font-weight: normal; + } + blockquote:before, blockquote:after, + q:before, q:after { + content: ""; + } + blockquote, q { + quotes: "" ""; + } + +/*----------------------------------------------------------------*/ +/* global */ +/*----------------------------------------------------------------*/ +a.obfuscemail { + text-decoration: none; +} + +a:link,a:visited { + text-decoration: none; + color: #004ca8; +} +a:hover { + text-decoration: underline; + color: #005CCB; +} +.clear { + clear: both; +} +em { + font-style: italic; +} +strong { + font-weight: bold; +} + +/*----------------------------------------------------------------*/ +/* newpad button */ +/*----------------------------------------------------------------*/ + +.fpcontent .newpadbuttonwrap { + width: 152px; + height: 35px; + background: url(/static/img/davy/btn/createpad-small.gif) no-repeat bottom left; +} +.fpcontent .newpadbuttonwrap a { + width: 152px; + position: relative; + padding: 35px 0 0 0; + overflow: hidden; + background: transparent url(/static/img/davy/btn/createpad-small.gif) no-repeat top left; + height: 0px; + display: block; +} + +/*----------------------------------------------------------------*/ +/* 500 error page */ +/*----------------------------------------------------------------*/ +#errorpage .error500 { + font-size: 1em; + background: #fcc; + border: 1px solid #f00; + padding: 1em; + margin: 1em 2em; + font-weight: bold; +} + +/*----------------------------------------------------------------*/ +/* padviewpage */ +/*----------------------------------------------------------------*/ +body#padviewbody { + background-color: #ebebeb; +} +#padviewpage a { + text-decoration: underline; +} +#padviewpage #padviewheader { + margin: 8px; + padding: 8px; + border: 1px solid #ccc; + background-color: #e0e0ff; + line-height: 160%; +} +#padviewpage #padviewheader h1 { + font-weight: bold; + font-family: "Lucida Grande","Lucida Sans Unicode",sans-serif; + font-size: 2em; +} +#padviewpage .metadata { + color: #333; +} +#padviewpage .rlabel { + font-weight: bold; +} +#padviewpage p { + margin-top: 2px; +} +#padviewpage #padcontent { + border: 1px solid #ccc; + margin: 8px; + padding: 8px; + font-family: sans-serif; + font-size: 12px; + background-color: #fff; + line-height: 130%; +} +#padviewpage #padviewfooter { + margin: 8px; + padding: 8px; + font-size: 12px; +} + + +#padviewpage #export td.exportpic a img { + border: 0; +} + +#padviewpage #export a.disabledexport { + color: gray; + text-decoration: none; +} + +#padviewpage #export { + font-size: 1em; +} + +#padviewpage #export .exportlink { + margin: 2px 0; +} + +#padviewpage #export td.exportpic { + padding-left: 10px; +} + +#padviewpage #export td.labelcell { + padding-left: 4px; +} + +#export img { + vertical-align: middle; + padding: 4px; + padding-bottom: 8px; + padding-left: 3px; +} + +#export span.titlelabel { + vertical-align: top; + padding-right: 12px; + font-size: 1.3em; + color: rgb(0, 0, 0); + font-weight: bold; + margin-top: 10px; +} + +#export td.labelcell a { + + vertical-align: middle; + font-size: 1em; + padding-right: 12px; + color: rgb(0, 52, 143); + font-weight: bold; +} + + +/*----------------------------------------------------------------*/ +/* feature tour page */ +/*----------------------------------------------------------------*/ +#featuretourpage {} +#featuretourpage p { margin-top: 1em; } +#featuretourpage #screencastmsg { margin: 2em 0; } +#featuretourpage .featurebox { + clear: both; + padding: 1em 1em; + margin-top: 2em; + margin-left: auto; + margin-right: auto; + background: #eee; + border: 1px solid #ccc; +} +#featuretourpage .featurebox .featureprose { +} +#featuretourpage .featurebox .featureprose h2 { +} +#featuretourpage .featurebox .featureprose p { + padding: 0; + margin: 1em 0; +} +#featuretourpage .featurebox img { + border: 1px solid #aaa; + margin: 0 1em 1em 1em; +} +#featuretourpage #usersbox div.featureprose { } +#featuretourpage #usersimg { float: right; } +#featuretourpage #editsimg { padding: 0; margin: 0; } +#featuretourpage #neverlosework img { float: left; } +#featuretourpage #neverlosework div.featureprose { } +#featuretourpage #lockimg { float: right; border: 0;} +#featuretourpage #revisionsimg { float: left; margin-left: 0; } +#featuretourpage #codeimg { float: left; margin-left: 0; } +#featuretourpage h2 { + margin-top: 0; + font-size: 1.5em; + font-weight: bold; +} +#featuretourpage p { + font-size: 1.1em; +} + +/*----------------------------------------------------------------*/ +/* product page */ +/*----------------------------------------------------------------*/ + +#productpage p { + font-size: 1.2em; + color: #333; +} + +#productpage h1 { +} + +#productpage h2 { + font-size: 1.6em; + font-weight: bold; + font-family: inherit; + color: #399; + font-style: italic; + border-bottom: 1px solid #399; + margin-top: 1.5em; + margin-bottom: 0.3em; +} + +#productpage #howuse { + margin-left: 80px; + margin-right: 80px; +} + +#productpage #howuse p { + font-size: 1.2em; + line-height: 150%; +} + +#productpage .tourbar { width: 100%; } +#productpage .tourbar td { padding: 3px; } +#productpage .tourbar .left { text-align: left; font-weight: bold; font-size: 1.6em; } +#productpage .tourbar .right { text-align: right; } + +#productpage .tourbar a { + color: #33f; + font-size: 1.4em; + font-weight: bold; +} + +#productpage #tourtop { border-bottom: 1px solid #999; } +/* #productpage #tourbot { border-top: 1px solid #999; } */ + +#productpage #pageshot img { + display: block; + margin-top: 10px; + margin-bottom: 10px; + margin-left: auto; + margin-right: auto; + padding: 0; +} + +#productpage .javascripton #tourbody { + /*height: 650px;*/ + padding-top: 1px; + padding-bottom: 1px; +} +#productpage .javascripton .tourprose { + display: none; +} +#productpage #usecases table { + height: 300px; + padding: 20px auto; + border: 1px solid #aaa; + width: 100%; +} +#productpage #usecases td { + vertical-align: top; +} + +#productpage #usecases p { + font-family: Georgia, serif; + font-size: 1.3em; + line-height: 1.3; +} + +#productpage #usecases h3 { + padding: 0; margin: 0; + font-weight: bold; + color: black; + font-family: inherit; + font-size: 1.6em; + margin-top: 0.5em; +} + +#productpage #usecases strong { + font-style: normal; + font-weight: normal; + background-color: #ffc; +} + +#productpage #usecases p.intro { margin: 0.5em 0;} + +#productpage #usecases #prosecell { + padding-left: 20px; + padding-right: 20px; + padding-top: 15px; + border-left: 1px solid #ccc; + background: #fff url(/static/img/oct/insetrect.gif) no-repeat right top; +} + +#productpage #usecases #prosecell p { + padding: 0; + margin: 0; + margin-bottom: 0.8em; +} + +#productpage .showpageshot #usecases { display: none; } +#productpage .showusecases #pageshot { display: none; } + +#productpage #tourleftnavcell { width: 200px; } + +#productpage ul#tourleftnav { margin: 0; padding: 0; list-style: none; } +#productpage ul#tourleftnav li { margin: 0; padding: 0; background: #fff; } +#productpage ul#tourleftnav li a { color: #33f; text-decoration: none; } +#productpage ul#tourleftnav li a:hover { text-decoration: underline; } +#productpage ul#tourleftnav li a { outline: none; } +#productpage ul#tourleftnav li { background: url(/static/img/oct/usecasesnavup.gif) repeat-x left center; border-bottom: 1px solid #ccc; } +/*#productpage ul#tourleftnav li:hover { background: url(/static/img/oct/usecasesnavuph.gif) repeat-x left center; }*/ +#productpage ul#tourleftnav li.selected { background: url(/static/img/oct/usecasesnavdown.gif) repeat-x left center } +/*#productpage ul#tourleftnav li.selected:hover { background: url(/static/img/oct/usecasesnavdownh.gif) repeat-x left center; }*/ +#productpage ul#tourleftnav li.selected a { color: #000; background: url(/static/img/oct/tinytriangle.gif) no-repeat 95% center; } + +#productpage #tourleftnav a { + font-size: 1.2em; + padding: 0.4em 0.4em; + display: block; + font-weight: bold; + font-family: inherit; + font-style: italic; + cursor: pointer; +} + +.fpcontent .newpadbuttonwrap { + margin: 0 auto; +} + + +/*----------------------------------------------------------------*/ +/* faq page */ +/*----------------------------------------------------------------*/ +#faqpage hr { + width: 100%; + margin-top: 2em; + margin-bottom: 2em; + margin-left: auto; + margin-right: auto; + color: #ccc; +} +div#faqpage h2 { + border-bottom: 1px solid #aaa; + margin: 0; +} +#faqpage div.answer { + color: #222; + padding: 1em; +} +#faqpage ul.qlist { margin: 2em 0 4em 1.4em; } +#faqpage ul.qlist li { margin: .5em 0; } + +/*----------------------------------------------------------------*/ +/* contact page */ +/*----------------------------------------------------------------*/ +#contactpage div.cbox { + padding: 1em; + margin: 2em 0; + width: 330px; + height: 200px; +} +#contactpage h2 { + margin: 0; +} +#contactpage #boxleft { + float: left; + margin-left: 1em; +} +#contactpage #boxright { + float: right; + margin-right: 1em; +} +#contactpage #boxright p { + font-size: 1.4em; + font-family: serif; + color: #222; + padding-left: 2em; +} +/*----------------------------------------------------------------*/ +/* company page */ +/*----------------------------------------------------------------*/ + +#companypage div#appjetinc { width: 300px; float: left; padding: 2em; } +#companypage div#appjetinc p { padding-left: 1em; } +#companypage img#ajlogo { margin-top: 1em; border: 0; } +#companypage img#pier38 { border: 1px solid #888; float: right; margin-top: 1em; } +#companypage table img { border: 1px solid #444; margin-top: 4px; } +#companypage table td { padding: 15px; vertical-align: top; } +#companypage table td p.intro { margin-top: 0; } + +/*----------------------------------------------------------------*/ +/* blog */ +/*----------------------------------------------------------------*/ + +.blogbody { background: #f8f8f8; } + +.blogpage a#subscribelink { + font-size: .92em; + display: block; + background: #fff; + border: 1px solid #666; + font-weight: bold; + margin-bottom: 1em; + padding: 4px 8px; + color: #049; + text-decoration: none; +} + +.blogpage div#subscribewrap a:hover { + background: #def; +} +.blogpage a#subscribelink img { + border: 0; + float: left; +} +.blogpage div#subscribewrap span.subtext { + display: block; + float: left; + padding-left: 8px; + padding-top: 2px; +} + +div#blogcol1 { + width: 520px; + padding-left: 50px; + float: left; + font-size: .9em; +} + +div#blogcol2 { + float: left; + width: 240px; + margin-top: 24px; + margin-left: 1em; +} + +div#recentpostsbox { + border: 1px solid #ccc; + background: #fefefe; + padding: 12px 6px; + font-size: .8em; +} +div#recentpostsbox p { + margin: 0; + font-weight: bold; + padding-left: .5em; +} +div#recentpostsbox a { + color: #049; + text-decoration: none; +} +div#recentpostsbox a:hover { + text-decoration: underline; +} +div#recentpostsbox ul li { + margin: 0; + margin-top: .4em; +} + +.blogpage div.bpheader { + border-top: 1px solid #ccc; + border-bottom: 1px solid #ccc; + border-right: 1px solid #ccc; + border-left: 1px solid #ccc; + background: #eee; + margin-top: 24px; + padding: 1em; +} + +.blogpage div.blogpost_mainpage_content { + background: #fff; + padding: 0 1em; + padding-top: 0.1em; + padding-bottom: 0.5em; + border-right: 1px solid #ccc; + border-left: 1px solid #ccc; + border-bottom: 1px solid #ccc; + font-size: 100%; + line-height: 1.4; +} +.blogpage div.blogpost_mainpage_content a { + text-decoration: underline; +} +.blogpage div.blogpost_mainpage_content a:hover { + color: red; +} + +.blogpage div.bpheader div.postdate a { + text-decoration: none; + font-size: 1em; + font-weight: bold; + font-style: italic; + color: #555; +} +.blogpage div.bpheader h2 { margin: 0; border: 0; } +.blogpage div.bpheader h2 a { + font-size: 1em; + text-decoration: none; + color: #049; + margin: 0; + font-style: normal; +} +.blogpage div#disqus_thread { + margin-top: 40px; +} +.blogpage .commentslink { + text-align: right; +} +.singleblogpost #blogposttop { + margin-left: 50px; +} + +.blogpage h3 { + font-weight: bold; + font-size: 1em; + color: #050; +} + +.blogpost_mainpage_content ol { } +.blogpost_mainpage_content ol li { + margin-top: 1em; + margin-left: 2em; + list-style: decimal; +} + +.blogpage div.code { + font-family: monospace; + border: 1px solid yellow; + padding: 0.5em; + background: #ffd; +} + +.blogpage tt { + font-family: monospace; +} + + +/*----------------------------------------------------------------*/ +/* create pad */ +/*----------------------------------------------------------------*/ +#createpadpage form { + width: 80%; + margin-left: auto; + margin-right: auto; + border: 1px solid #ddd; + background: #eef; + font-size: 1.8em; + text-align: center; + padding: 2em; +} +#createpadpage #padurl { + background: #fff; + border: 1px solid #ccc; + padding: 1em; +} +#createpadpage input { + font-size: 1.8em; +} +/*----------------------------------------------------------------*/ +/* pad full */ +/*----------------------------------------------------------------*/ +#padfullpage #msg { + margin: 2em 0; + padding: 2em; + background: #eee; + border: 1px solid #aaa; + font-size: 1.3em; +} +#padfullpage #padurlwrap { + text-align: center; + margin-bottom: 3em; +} +#padfullpage #padurl { + background: #fff; + border: 1px solid #ccc; + padding: 1em; +} +/*----------------------------------------------------------------*/ +/* beta signup */ +/*----------------------------------------------------------------*/ +#betasignuppage img#betasign { float: left; margin-top: 20px; } +#betasignuppage div#betaformwrap { + margin: 15px; + padding: 20px; + margin-left: 200px; + border: 1px solid #ccc; + background: #eee; +} +#betasignuppage div#betaformwrap p { + margin: 0; + color: #333; + margin-bottom: 1em; +} +#betasignuppage div#betaform { padding: 2em 0; } +#betasignuppage div#betaform input#email { font-size: 1.6em; color: #555; } +#betasignuppage div#betaform button { font-size: 1.6em; } +#betasignuppage div#confirm { display: none; } +#betasignuppage div#error { + margin: 1em 3em 2em 2em; + color: red; + display: none; +} +#betasignuppage div#confirm { + margin: 2em 2em 2em 0em; + color: green; + font-weight: bold; + display: none; +} +#betasignuppage div#subtext { font-size: .9em; color: #666; } + +/*----------------------------------------------------------------*/ +/* time slider */ +/*----------------------------------------------------------------*/ + +body#padsliderbody { + font-size: 1.2em; + padding: 20px; + background-color: #fff; +} + +#padsliderbody #stuff { + width: 600px; + margin-top: 10px; +} + +#padsliderbody #sliderui { + margin: 10px; +} + +#padsliderbody #controls { + background: #eee; + padding: 5px; + border: 1px solid #999; +} + +#padsliderbody #currevdisplay { + margin-top: 3px; +} + +#padsliderbody #controls a { + color: #00f; + text-decoration: underline; + cursor: pointer; +} + +#padsliderbody #stuff { + padding: 5px; +} + +/*----------------------------------------------------------------*/ +/* testimonials */ +/*----------------------------------------------------------------*/ + +#testimonials { + padding: 0 3em; + font-family: times serif; +} + +#testimonials .head { + font-weight: bold; + padding-top: 4px; + padding-right: 80px; +} + +#testimonials .quote-open { + background: url(/static/img/about/quote-open.png) no-repeat left top; + padding-left: 80px; + margin-top: 2em; +} + +#testimonials .quote-close { + background: url(/static/img/about/quote-close.png) no-repeat right bottom; + padding-right: 80px; + text-align: justify; + color: #222; +} + +#testimonials .attrib { + font-style: italic; + text-align: right; + padding-left: 2em; + padding-right: 80px; + color: #444; +} + +#testimonials .attrib p { + margin: 0; +} + + +/* pne faq */ + +div.pne-faq dt { + font-size: 1.1em; + border-bottom: 1px solid #444; + color: #666; + margin: 1.6em 0 0.75em 0; +} + +/* support page */ + +div#support-content { + margin: 0 4em; +} + +div#forums-content { + margin: 0 4em; +} diff --git a/trunk/etherpad/src/static/css/fluxbb.css b/trunk/etherpad/src/static/css/fluxbb.css new file mode 100644 index 0000000..844ceca --- /dev/null +++ b/trunk/etherpad/src/static/css/fluxbb.css @@ -0,0 +1,55 @@ +/* fluxbb-specific CSS rules go here. */ + +/*----------------------------------------------------------------*/ +/* Etherpad overriding shit */ +/*----------------------------------------------------------------*/ + +div.epforum { + width: 780px; + padding-top: 1em; + margin-left: auto; + margin-right: auto; +} + +div#punwrap div.pun { + font-size: 120%; +} + +div#idx1 h2 { display: none; } + +div#punwrap div.pun h2 { + color: white; + font-style: normal; + font-weight: normal; + font-family: sans-serif; + font-size: 1.2em; +} + +div#punwrap div.pun p { margin: 0; } + +.pun div.box { + border: 1px solid #ccc; +} + +div#brdheader div.box { + background: #fff; + border: 0; + padding: 0; + margin: 0; +} + +div#brdheader div#brdtitle { + padding: 0; +} +div#brdheader h1 { + font-family: "Lucida Grande","Lucida Sans Unicode",sans-serif; + color: #666; + border-bottom: 1px solid #666; + font-size: 1.8em; +} + +div#brdwelcome { + margin-top: 1em; + border: 1px solid #ccc; + background: #f1f1f1; +} diff --git a/trunk/etherpad/src/static/css/framedpage.css b/trunk/etherpad/src/static/css/framedpage.css new file mode 100644 index 0000000..a99554b --- /dev/null +++ b/trunk/etherpad/src/static/css/framedpage.css @@ -0,0 +1,175 @@ +/*------ + Global Container +------*/ + +#container { + font-family: Arial, Helvetica, Calibri, sans-serif; +} +body.home { + background: #f7f7f7 url(/static/img/davy/bg/home2.png) repeat-x top; +} +.home #container { + width: 920px; margin: 0 auto; +} +body.nothome { + background: #f7f7f7 url(/static/img/davy/bg/product.png) repeat-x top; +} +.nothome #container { + width: 910px; margin: 0 auto; +} + +/*------ + Layout +------*/ + +#navigation, +.home #top, +.home #bottom, +#footer { + width: 888px; + margin: 0 auto; +} + +/* framed page general */ +div.fpcontent { + width: 848px; + margin: 0 auto; + + font-size: 1.3em; + padding: 20px; + + background-color: #fff; + border-left: 1px solid #ccc; + border-right: 1px solid #ccc; + border-bottom: 1px solid #ccc; + border-top: 0; +} +div.fpcontent h1 { + color: #666; + border-bottom: 1px solid #666; + margin: .8m 0 1em 0; + font-size: 1.8em; +} +div.fpcontent h2 { + color: #666; + border-bottom: 1px solid #666; + font-size: 1.4em; + margin: 1em 0; +} +div.fpcontent p { + margin: 1em 0; + line-height: 150%; +} +div.fpcontent ul { + list-style: disc; + padding-left: 1.5em; +} +div.fpcontent ul li { + margin: 1em 0; + padding-left: .5em; +} + +/*---------- + Navigation +----------*/ + +#topnav_wrap { + background: url(/static/img/davy/bg/product.png) repeat-x top; +} +#navigation { + height: 38px; + overflow: hidden; + background: url(/static/img/davy/bg/home2.png) repeat-x top; +} +#navigation h1 a { + display: block; + width: 120px; + position: relative; + padding: 38px 0 0 0; + overflow: hidden; + background: transparent url(/static/img/davy/gfx/product-logo.gif) no-repeat 0 6px; + height: 0px; + float: left; +} +.home #navigation h1 a { + display: none; +} +#navigation ul { + margin-right: -10px; +} +#navigation li { + display: inline; +} +#navigation li a { + font-family: Calibri, "Trebuchet MS", Trebuchet, Arial, sans-serif; + font-size: 1.208em; + text-transform: uppercase; + color: #fff; + text-shadow: 0 1px 0 #223f6b; + letter-spacing: 1px; + display: block; + padding: 11px 10px 13px 10px; + float: right; +} +.home #navigation .topnav_pricing a { + color: #ffc261; +} +.home #navigation .topnav_pricing a:hover { + color: #FEAC59; +} +#navigation li.selected a { + color: #bddbff; +} +.home #navigation li.selected a { + background: url(/static/img/davy/bg/home-nav-selected.png) no-repeat center 32px; +} +.nothome #navigation li.selected a { + background: url(/static/img/davy/bg/product-nav-selected-white.png) no-repeat center 32px; +} +#navigation li a:hover { + color: #DEEDFF; + text-decoration: none; +} + + +/*------ + Footer +------*/ + +.home #footer { + border-top: 1px solid #d9d9d9; + margin-top: 24px; +} + +.nothome #footer { + margin-top: 0px; +} + + #footer-inner { + border-top: 1px solid #f9f9f9; + padding: 12px 0; + color: #666; + font-size: .917em; + } + +#footer-left { + float: left; + width: 700px; +} + #footer ul, + #footer li { + display: inline; + } + #footer li { + margin-left: 1em; + } + + #footer #appjet { + float: right; + margin-right: -12px; + } + #footer #appjet a { + background: url(/static/img/davy/gfx/plane.gif) no-repeat right center; + padding-right: 12px; + } + diff --git a/trunk/etherpad/src/static/css/global-pro-account.css b/trunk/etherpad/src/static/css/global-pro-account.css new file mode 100644 index 0000000..6c34446 --- /dev/null +++ b/trunk/etherpad/src/static/css/global-pro-account.css @@ -0,0 +1,52 @@ +div.error { + border: 1px solid red; + background: #fee; + padding: 1em; + margin: 1em 0; + width: 600px; + font-weight: bold; +} + +form#global-sign-in { + background: #eeeef6; + padding: 1em; + border: 1px solid #ddd; + margin: 1em 0; + width: 600px; +} + +form label { + color: #444; + margin-bottom: .2em; +} + +form input { + border: 1px solid #377ec6; +} + +form#global-sign-in label { + display: block; + margin-top: 1em; +} + +form#global-sign-in button { + border: 0; + cursor: pointer; + color: #fff; + font-weight: bold; + overflow: visible; + padding: 0; + background: #70a4ec; + border: 1px solid #3773c6; + padding: 4px 16px; + margin-top: 14px; +} + +.global-pro-account p { + font-size: 86%; +} + +div.tip { + margin: .5em 0; + font-size: 90%; +} diff --git a/trunk/etherpad/src/static/css/home-opensource.css b/trunk/etherpad/src/static/css/home-opensource.css new file mode 100644 index 0000000..0d6da6d --- /dev/null +++ b/trunk/etherpad/src/static/css/home-opensource.css @@ -0,0 +1,44 @@ +#home { + width: 600px; + margin: 0 auto; + padding: 4em; + text-align: center; +} + +#home #title { + font-size: 3.6em; +} + +#home #buttons { + padding-top: 5em; +} + +#home a#home-newpad, #home a#home-newsite { + padding: 1em; + margin: 12px 40px; + font-size: 1.6em; + border: 1px solid black; + background: #049; + color: #fff; + width: 30%; +} + +#home a#home-newpad:hover, #home a#home-newsite:hover { + background: #26b; + text-decoration: none; +} + +#tos { + margin-top: 8em; + color: #222; +} + +#tos h1, #tos p { + margin: 1.5em 0; +} + +#tos h1 { + font-weight: bold; + font-size: 1.1em; +} + diff --git a/trunk/etherpad/src/static/css/home.css b/trunk/etherpad/src/static/css/home.css new file mode 100644 index 0000000..797a8a7 --- /dev/null +++ b/trunk/etherpad/src/static/css/home.css @@ -0,0 +1,264 @@ +/*-------- + Homepage + --------*/ + +/* Top */ + +#top { + height: 349px; + position: relative; + background: url(/static/img/davy/gfx/screenshot.gif) no-repeat bottom right; +} + +#homepage-notice { + margin: 10px auto; + width: 888px; + background: #ffc; + color: #000; + border: 2px solid #550; + font-size: 1.4em; + padding: 8px; +} + +#intro-left { + width: 340px; + float: left; + font-family: Arial, Helvetica, sans-serif; + text-shadow: 0 0 1px #18487F; + padding-top: 10px; +} + #intro-left h1 { + width: 210px; + position: relative; + padding: 57px 0 0 0; + overflow: hidden; + background: transparent url(/static/img/davy/gfx/home-logo2.gif) no-repeat top left; + height: 0px; + margin: 0 0 5px -8px; + } + #intro-left h2 { + color: #d1e5ff; + font-size: 1.5em; + font-weight: bold; + line-height: 1.2; + } + #intro-left h2 a { + color: #9ac6ff; + font-style: italic; + border-bottom: 2px solid; + } + #intro-left h2 a:hover { + text-decoration: none; + color: #4A91EE; + } + #intro-left p { + color: #fff; + font-size: 1.167em; + line-height: 1.3; + margin: 10px 0; + } + #intro-links { + position: absolute; + bottom: 17px; + left: -1px; + width: 500px; + } + #intro-links a { + display: block; + float: left; + position: relative; + padding: 64px 0 0 0; + overflow: hidden; + background-repeat: no-repeat; + background-position: top left; + height: 0; + } + #newpadbutton { + width: 212px; + background-image: url(/static/img/davy/btn/createpad-home.gif); + margin-right: 11px; + } + #betabutton { + width: 220px; + background-image: url(/static/img/davy/btn/signup-home-4.gif); + } + +/* Bottom */ + +#bottom { + padding-top: 28px; +} + +#quote { + border-bottom: 1px solid #e0e0e0; + padding-bottom: 24px; + text-shadow: 0 0 1px #F7F7F7; +} + #quote q { + width: 680px; + float: left; + font-size: 1.33em; + height: 1.5em; + } + #quote #quote-right { + width: 200px; + float: right; + text-align: right; + } + #quote #quote-right cite { + display: block; + font-size: 1.33em; + font-style: italic; + margin-bottom: 8px; + } + +#features { + border-top: 1px solid #fff; + padding-top: 22px; + text-shadow: 0 0 1px #F7F7F7; +} + #features li { + width: 213px; + float: left; + margin-left: 12px; + } + #features li.first { + margin-left: 0; + } + #features li img { + float: left; + margin-right: 8px; + } + #features li strong, + #features li span { + display: block; + margin-left: 40px; + } + #features li strong { + font-size: 16px; + font-weight: normal; + margin-bottom: 6px; + } + #features li span { + line-height: 17px; + } + +#uses { +width: 675px; +float: left; + margin-bottom: 28px; + margin-right: -12px; +position: relative; +} +#uses li { +width: 213px; +float: left; + margin-right: 12px; +} +#uses li a { + font-size: 1.5em; + font-family: Calibri, Arial, Helvetica, sans-serif; + text-shadow: 0 1px 0 #fff; +color: #214b7e; +} +#uses li a:hover { + text-decoration: none; +color: #30619c; +} +#uses li .thumb { +display: block; +width: 213px; +position: relative; +padding: 123px 0 0 0; +overflow: hidden; + background-repeat: no-repeat; + background-position: top left; +height: 0px; + margin-top: 10px; +} +#uses #use-meetings .thumb { background-image: url(/static/img/davy/gfx/use-meetings.png); } +#uses #use-programming .thumb { background-image: url(/static/img/davy/gfx/use-programming.png); } +#uses #use-writing .thumb { background-image: url(/static/img/davy/gfx/use-writing.png); } +#uses .more { +display: block; +position: absolute; +padding: 21px 0 0 0; +overflow: hidden; +background: transparent url(/static/img/davy/btn/uses-more.gif) no-repeat top left; +height: 0px; +width: 58px; +top: 0; +right: 12px; + z-index: 10; +} +* html #uses .more { +right: 24px; +} + +#blog { +width: 213px; +float: left; + margin-right: 12px; +clear: left; +} +#blog h3 { + font-family: Calibri, "Trebuchet MS", Trebuchet, Arial, Helvetica, sans-serif; +color: #666; + text-transform: uppercase; + text-shadow: 0 1px 0 #fff; + letter-spacing: 1px; +} +#blog li { +margin: 1.25em 0; +} +#blog li strong a { + font-size: 1.33em; + font-family: Calibri, Arial, Helvetica, sans-serif; + font-weight: bold; +} +#blog li small { +display: block; + font-size: .917em; + font-family: Calibri, Arial, Helvetica, sans-serif; +color: #666; +margin: 2px 0; +} +#blog li small a { +color: #4182c2; +} +#blog li span { + line-height: 1.3; +} + +#quotes { +width: 406px; +float: left; +background: #e0ecf9; +border: 1px solid #8ba9cc; + border-left: 0; + border-right: 0; +color: #334050; + font-family: Calibri, Arial, Helvetica, sans-serif; +padding: 12px 16px 0; + text-shadow: 0 0 1px #e0ecf9; +} +#quotes q { + font-size: 1.5em; + line-height: 1.22; +display: block; + text-indent: -.45em; +} +#quotes cite { + font-size: 1.33em; +display: block; + font-style: italic; + text-align: right; +margin: .5em 0 1em;; +} +#quotes .more { + text-align: right; + margin-bottom: 1em; + position: relative; + right: -.75em; + font-size: 1.167em; +} diff --git a/trunk/etherpad/src/static/css/lib/jquery.contextmenu.css b/trunk/etherpad/src/static/css/lib/jquery.contextmenu.css new file mode 100644 index 0000000..15a69aa --- /dev/null +++ b/trunk/etherpad/src/static/css/lib/jquery.contextmenu.css @@ -0,0 +1,244 @@ +/* Classic Windows Theme (default) */ +/* =============================== */ +.context-menu-theme-default { + border:2px outset white; + background-color:#D4D0C8; +} +.context-menu-theme-default .context-menu-item { + text-align:left; + cursor:pointer; + padding:4px 28px 4px 16px; + color:black; + font-family:Tahoma,Arial; + font-size:11px; +} +.context-menu-theme-default .context-menu-separator { + margin:4px 2px; + font-size:0px; + border-top:1px solid #808080; + border-bottom:1px solid white; +} +.context-menu-theme-default .context-menu-item-disabled { + color:#808080; +} +.context-menu-theme-default .context-menu-item .context-menu-item-inner { + background:none no-repeat fixed 999px 999px; /* Make sure icons don't appear */ +} +.context-menu-theme-default .context-menu-item-hover { + background-color:#0A246A; + color:white; +} +.context-menu-theme-default .context-menu-item-disabled-hover { + background-color:#0A246A; +} + +/* Windows XP Theme */ +/* ================ */ +.context-menu-theme-xp { + border:1px solid #666; + padding:1px; + background:#F9F8F7 url(/static/img/lib/jquery.contextmenu.images/cmenu-xp-bg.gif) repeat-y top left; +} +.context-menu-theme-xp .context-menu-separator { + margin:4px 2px; + font-size:0px; + border-top:1px solid #808080; + border-bottom:1px solid white; +} +.context-menu-theme-xp .context-menu-item { + text-align:left; + color:black; + font-family:arial; + font-size:11px; + cursor:pointer; +} +.context-menu-theme-xp .context-menu-item .context-menu-item-inner { + background:none no-repeat 2px center; + padding:4px 10px 4px 30px; +} +.context-menu-theme-xp .context-menu-item-hover .context-menu-item-inner { + background:#B6BDD2 none no-repeat 2px center; + padding:3px 9px 3px 29px; + border:1px solid #0A246A; +} + +/* Windows Vista Theme */ +/* =================== */ +.context-menu-theme-vista { + background:#FAFAFA url(/static/img/lib/jquery.contextmenu.images/cmenu-vista-bg.gif) repeat-y left top; + border:1px solid #868686; +} +.context-menu-theme-vista .context-menu-item { + text-align:left; + cursor:pointer; + color:black; + font-family:Tahoma,Arial; + font-size:11px; +} +.context-menu-theme-vista .context-menu-separator { + margin:0px 0px 0px 32px; + font-size:0px; + border-top:1px solid #C5C5C5; + border-bottom:1px solid #F5F5F5; +} +.context-menu-theme-vista .context-menu-item-hover { + background:transparent url(/static/img/lib/jquery.contextmenu.images/cmenu-vista-menu-item-hover.gif) repeat-x left center; + border:1px solid #D7D0B3; +} +.context-menu-theme-vista .context-menu-item .context-menu-item-inner { + padding:4px 16px 4px 35px; + margin-left:1px; + background-color:none; + background-repeat:no-repeat; + background-position:3px center; + background-image:none; +} +.context-menu-theme-vista .context-menu-item-hover .context-menu-item-inner { + padding:3px 15px 3px 35px; + margin-left:0px; +} +.context-menu-theme-vista .context-menu-item-disabled { + color:#A7A7A7; +} + +/* OSX Theme */ +/* ========= */ +.context-menu-theme-osx { + background-color:white; + opacity: .93; + filter: alpha(opacity=93); + zoom:1.0; + border:1px solid #b2b2b2; +} +.context-menu-theme-osx .context-menu-item { + text-align:left; + cursor:pointer; + color:black; + font-family:Lucida Grande,Arial; + font-weight:700; + font-size:12px; + opacity: 1.0; + filter: alpha(opacity=100); + z-index:1; +} +.context-menu-theme-osx .context-menu-separator { + margin:5px 1px 4px 1px; + font-size:0px; + border-top:1px solid #e4e4e4; +} +.context-menu-theme-osx .context-menu-item-hover { + background-color:#1C44F2; + color:white; +} +.context-menu-theme-osx .context-menu-item .context-menu-item-inner { + padding:2px 10px 2px 22px; + background-color:none; + background-repeat:no-repeat; + background-position:4px center; + background-image:none; +} +.context-menu-theme-osx .context-menu-item-disabled { + color:#939393; +} + +/* Linux Human Theme */ +/* ================= */ +.context-menu-theme-human { + background:#F9F5F2; + border:1px solid #963; +} +.context-menu-theme-human .context-menu-item { + text-align:left; + cursor:pointer; + color:black; + font-family:Helvetica,DejaVu Sans,Arial; + font-size:12px; + line-height:20px; + height:28px; + border:1px solid #F9F5F2; + border-left:0; + border-right:0; +} +.context-menu-theme-human .context-menu-separator { + margin:0px 0px 0px 32px; + font-size:0px; + border-top:1px solid #C5C5C5; + border-bottom:1px solid #F5F5F5; +} +.context-menu-theme-human .context-menu-item-hover { + background:transparent url(/static/img/lib/jquery.contextmenu.images/cmenu-human-menu-item-hover.gif) repeat-x left center; + border-color:#963; +} +.context-menu-theme-human .context-menu-item .context-menu-item-inner { + padding:4px 16px 4px 35px; + margin-left:0px; + background-color:none; + background-repeat:no-repeat; + background-position:3px center; + background-image:none; +} +.context-menu-theme-human .context-menu-item-hover .context-menu-item-inner { +} +.context-menu-theme-human .context-menu-item-disabled { + color:#A7A7A7; +} + +/* Gloss Theme */ +/* =========== */ +.context-menu-theme-gloss { + background:#f4f4f4 url(/static/img/lib/jquery.contextmenu.images/cmenu-gloss-bg.gif) repeat-y left center; + border:1px solid #f4f4f4; + padding:1px; + padding-right:0; +} +.context-menu-theme-gloss .context-menu-item { + text-align:left; + cursor:pointer; + color:black; + font-family:Helvetica,DejaVu Sans,Arial; + font-size:12px; + line-height:20px; + height:27px; + /*border:1px solid transparent;*/ + border:1px solid #f4f4f4; /* IE6 doesn't have "transparent" -- DG */ +} +.context-menu-theme-gloss .context-menu-separator { + margin:0px 0px 0px 32px; + font-size:0px; + border-top:1px solid #C5C5C5; + border-bottom:1px solid #F5F5F5; +} +.context-menu-theme-gloss .context-menu-item-hover { + background:transparent url(/static/img/lib/jquery.contextmenu.images/cmenu-gloss-menu-item-hover.gif) repeat-x left center; + color:#fff; + border-color:#000; + border-radius: 3px; + -webkit-border-radius: 3px; + -moz-border-radius: 3px; +} +.context-menu-theme-gloss .context-menu-item .context-menu-item-inner { + padding:4px 16px 4px 35px; + margin-left:0px; + background-color:none; + background-repeat:no-repeat; + background-position:3px center; + background-image:none; +} +.context-menu-theme-gloss .context-menu-item-hover .context-menu-item-inner { +} +.context-menu-theme-gloss .context-menu-item-disabled { + color:#A7A7A7; +} + +.context-menu-theme-gloss-cyan .context-menu-item-hover { + background-image:url(/static/img/lib/jquery.contextmenu.images/cmenu-gloss-cyan-menu-item-hover.gif); + border-color:#00c; +} + +.context-menu-theme-gloss-semitransparent .context-menu-item-hover { + background-image:url(/static/img/lib/jquery.contextmenu.images/cmenu-item-gloss-semitransparent-menu-item-hover.png); + border-color:#00c; + background-color:#30f; +} + + diff --git a/trunk/etherpad/src/static/css/pad.css b/trunk/etherpad/src/static/css/pad.css new file mode 100644 index 0000000..02c341f --- /dev/null +++ b/trunk/etherpad/src/static/css/pad.css @@ -0,0 +1,1000 @@ +*,html.body,p { margin: 0; padding: 0; } +html { + font-size: 62.5%; +} +div.hidden { display: none; } + +/*----------------------------------------------------------------*/ +/* pad */ +/*----------------------------------------------------------------*/ +body#padbody { + font-family: verdana, helvetica, sans-serif; + background: white; + color: black; +} + +body#padbody.limwidth { + background: #d2d2d2 url(/static/img/apr09/backgrad.png) repeat-x left top; +} + +body #padoutertable { width: 100%; } +body.limwidth #padoutertable { width: 940px; margin-left: auto; margin-right: auto; } +#padoutertable td#pot_main, #padoutertable td#pot_top, #padoutertable td.potshad { + vertical-align: top; zoom: 1; position: relative; } +#padoutertable #pot_main { background: white; padding-left: 12px; padding-right: 12px; + padding-top: 2px; +} + +body.fullwidth #padoutertable .potshad { display: none; } + +/* Achieve side drop shadows on top of background gradient using two drop shadow + images for each side (one with gradient in background, one to repeat down the + page). Each side drop shadow gets a column of the padoutertable, but split into + two cells, because if a single cell is used on each side with rowspan=2 with a + tall image in it, IE 6 chooses an unsightly initial height for the top bar. +*/ +body.limwidth #padoutertable .potshad { width: 4px; } +body.limwidth #padoutertable .potshad div { height: 200px; } +body.limwidth #padoutertable #pot_shadleft { + background: url(/static/img/apr09/shadleft.png) repeat-y right top; } +body.limwidth #padoutertable #pot_shadleft div, +body.limwidth #padoutertable #pot_shadlefttopseg { + background: url(/static/img/apr09/shadlefttop.png) no-repeat right top; } +body.limwidth #padoutertable #pot_shadright { + background: url(/static/img/apr09/shadright.png) repeat-y left top; } +body.limwidth #padoutertable #pot_shadright div, +body.limwidth #padoutertable #pot_shadrighttopseg { + background: url(/static/img/apr09/shadrighttop.png) no-repeat left top; } +body.limwidth #padoutertable #pot_main, body.limwidth #padoutertable #pot_top { + border-left: 1px solid #333; + border-right: 1px solid #333; +} +body.limwidth #padoutertable #pot_main { border-bottom: 1px solid #333; } + +#padoutertable #pot_top { background: #2e609e url(/static/img/apr09/topbar.gif) repeat-x left top; + height: 28px; vertical-align: middle; + border-bottom: 1px solid #333; + padding-left: 1px; padding-right: 1px; /* a little padding helps "active" rects not extend outside */ +} + +#padpage #pot_top a#headhomelink { + display: block; float: left; + height: 0; width: 88px; + padding-top: 28px; + overflow: hidden; + text-decoration: none; + background: url(/static/img/apr09/topbarlogo.gif) no-repeat left top; +} +#padpage #pot_top a#widthlink { + display: block; float: right; + height: 0; width: 28px; + padding-top: 28px; + overflow: hidden; + text-decoration: none; +} + +#padpage #pot_top, #padpage #pot_top a { color: #cbd7e7; } +#padpage #pot_top a:focus { outline: 0; } /* for firefox */ + +body.limwidth #padpage #pot_top a#widthlink { + background: url(/static/img/apr09/widthfull.gif) no-repeat center 8px; } +body.fullwidth #padpage #pot_top a#widthlink { + background: url(/static/img/apr09/widthlim.gif) no-repeat center 8px; } +body.limwidth #padpage #pot_top a#widthlink:hover { + background: url(/static/img/apr09/widthfullactive.gif) no-repeat center 8px; } +body.fullwidth #padpage #pot_top a#widthlink:hover { + background: url(/static/img/apr09/widthlimactive.gif) no-repeat center 8px; } + +#padpage #pot_top #headurl { + margin-left: 30px; + margin-top: 5px; + float: left; + margin-right: 20px; + padding: 2px; + height: 15px; + line-height: 14px; + font-size: 1.1em; +} + +#padpage #pot_top #shareurl { font-weight: bold; } + +#padpage #pot_top #newpadlink { + display: block; float: right; margin-right: 30px; font-size: 1.0em; + font-weight: bold; text-decoration: none; + height: 0; + padding-top: 8px; + padding-bottom: 20px; + padding-left: 20px; + padding-right: 6px; + overflow: hidden; + background: url(/static/img/apr09/newpadicon.gif) no-repeat 2px 8px; +} +#padpage #pot_top a#newpadlink:hover { + text-decoration: underline; color: white; +} + +/* +body#padbody.fullwidth { + background: #ddd; +} +#padpage { + +} +body.limwidth #padcontent { + width: 940px; + margin-left: auto; + margin-right: auto; +} +#padpage #padhead { + height: 38px; + text-align: center; + margin-bottom: 4px; +} +#padpage #padhead_inner { + width: 938px; + margin-left: auto; + margin-right: auto; + padding: 0 1px; + background: url(/static/img/oct/minitopback2.gif) repeat center top; + border: 1px solid #666; + border-top: 0; +} +#padpage #padhead a#headhomelink { + display: block; + float: left; + height: 0; + width: 154px; + padding-top: 37px; + overflow: hidden; + text-decoration: none; + background: url(/static/img/oct/minitoplogo2.gif) no-repeat left top; +} +#padpage #headnewpad { + float: right; +} +#padpage #headnewpad #newbutton { + margin-top: 5px; + margin-right: 20px; +} +#padpage #headurl { + margin-left: 70px; + margin-top: 5px; + float: left; + font-size: 1.4em; + margin-right: 20px; + padding: 5px 5px 5px 5px; + height: 17px; + line-height: 17px; +} +#padpage #headurl label { + font-weight: bold; + font-family:"Lucida Grande", Tahoma, Arial, Verdana, sans-serif; + font-size:1em; + position: relative; + top: 1px; +} +#padpage #headurl #shareurl { + border: 1px solid #999; + padding: 3px; +} +#padpage #padtablediv { + margin: 0; +} +body.limwidth #padpage #padtablediv { + margin: 0 20px; +} +*/ + +#padpage #padtable { + width: 100%; +} +#padpage #padtable td#topbar { + height: 16px; +} +#padpage #padtable div#topbarmsg { + display: none; + float: left; + color: #642; + font-size: 1.0em; + padding-top: 2px; + padding-left: 4px; + border-left: 1px solid #ccc; +} + +#padpage #topbar #connectionstatus { + float: left; + padding-top: 2px; + padding-right: 4px; + padding-left: 16px; + height: 16px; + font-size: 1.0em; + color: #666; +} +#padpage #topbar .connecting { + background: url(/static/img/pad/animated-orb-orange-12.gif) no-repeat left center; +} +#padpage #topbar .connected { + background: url(/static/img/pad/orb-greenred-12.gif) no-repeat left 3px; +} +#padpage #topbar .disconnected { + background: url(/static/img/pad/orb-greenred-12.gif) no-repeat left -17px; +} +#padpage #padtable a.showhide { + display: block; + margin: 0; + font-size: 1em; + text-decoration: none; +} +#padpage #padtable a.showhide:hover { + text-decoration: underline; +} +#padpage #padtable a.showhide, #padpage #padtable a.showhide:visited { + color: #66f; +} +#padpage #padtable a#showsidebar { + float: right; + display: none; + position: relative; + top: 2px; +} +#padpage #padtable a#hidesidebar { + float: left; + display: none; +} +/*#padpage #editorcontainer { + display: none; +}*/ +/*#padpage #toptoolbar { + display: none; +}*/ +#padpage .editorcell_loaded #editorcontainer { + background: #fff; + overflow: hidden; + display: block; +} +#padpage #toptoolbar { + border-bottom: 1px solid #666; + height: 30px; + background: #eee; + display: block; + position: relative; /* make it an offsetParent for padtitle stuff */ + overflow: hidden; +} +#padpage #bottoolbar { + border-top: 1px solid #666; + height: 30px; + background: #eee; + display: none; /* set in pad.js */ +} +#padpage #bottoolbar #viewzoom { + padding-left: 5px; + padding-top: 5px; + padding-right: 5px; + float: left; +} +#padpage #bottoolbar #viewfont { + padding-left: 5px; + padding-top: 5px; + padding-right: 5px; + float: left; +} +#padpage #editorcell { + border: 1px solid #666; +} +#padpage #toptoolbar a.toptoolbarbutton { + float: left; + height: 20px; + width: 20px; + border: 1px solid #999; + background-color: #eee; + background-repeat: no-repeat; + background-position: center center; + margin-top: 5px; + text-decoration: none; +} +#padpage #toptoolbar.disabledtoolbar a.toptoolbarbutton { + opacity: 0.5; + filter: alpha(opacity = 50); /* IE */ + zoom: 1; + cursor: auto; +} +#padpage #toptoolbar #padtitle { + float: left; + margin-top: 5px; + margin-left: 20px; + line-height: 20px; + width: 400px; + height: 20px; + overflow: hidden; + display: none; +} +#padpage #toptoolbar .padtitlepad { + font-style: italic; + color: #666; + font-size: 1.2em; +} +#padpage #toptoolbar #padtitletitle { + font-weight: bold; + font-size: 1.2em; +} +#padpage #toptoolbar .editlink { + font-size: 1em; + color: #666; +} +#padpage #toptoolbar .oklink { + display: none; + z-index: 2; + position: absolute; + line-height: 20px; + font-size: 1em; +} +#padpage #toptoolbar #padtitleedit { + z-index: 2; + position: absolute; + left: 0; + top: 0; + display: none; +} +#padpage #toptoolbar a:focus { + outline: 0; +} +#padpage #toptoolbar .bold { background-image: url(/static/img/may09/bold.gif); } +#padpage #toptoolbar .italic { background-image: url(/static/img/may09/italic.gif); } +#padpage #toptoolbar .underline { background-image: url(/static/img/may09/underline.gif); } +#padpage #toptoolbar .undo { background-image: url(/static/img/may09/undo.gif); } +#padpage #toptoolbar .redo { background-image: url(/static/img/may09/redo.gif); } +#padpage #toptoolbar .bold, #padpage #toptoolbar .undo { + margin-left: 5px; +} +#padpage #toptoolbar #passwordlock { + float: right; + margin-top: 5px; + margin-right: 5px; + width: 22px; + height: 22px; + text-decoration: none; +} +#padpage #toptoolbar a#passwordlock:hover { + background-color: #ffffee; +} +#padpage #toptoolbar .passwordhidden { display: none; } +#padpage #toptoolbar .passwordlocked { + display: block; + background: url(/static/img/may09/passwordlocked.gif) no-repeat center center; +} +#padpage #toptoolbar .passwordnone { + display: block; + background: url(/static/img/may09/passwordnone.gif) no-repeat center center; +} +#padpage #sidebarcell {} +#padpage #sidebar { + width: 300px; + border-top: 1px solid #666; + border-right: 1px solid #666; + border-bottom: 1px solid #666; + background: #fff; + overflow: auto; +} +#padpage div.sidebar_loading { + border-left: 1px solid #666; +} +#padpage #editorcontainer iframe { + width: 100%; + padding:0; + margin:0; +} +#padpage #appjetfooter { + padding: 3px 3px; + font-family: Verdana, Helvetica, sans-serif; + font-size: 1em; + text-align: right; +} +div#djs { + font-family: monospace; + font-size: 10pt; + height: 300px; + overflow: scroll; + border: 1px solid #ccc; + background: #fee; + margin: 5px 0; + padding: 6px; +} +div#djs p { margin: 0; padding: 0; display: block; } +#padpage a.small_link { + font-style: normal; + color: #66f; + text-decoration: none; + font-size: 1.1em; +} +#padpage a.small_link:hover { text-decoration: underline; } +#padpage .editorcell_loading #editorcellinner { + height: 400px; /* make #sizedcontent stretch the outer table for height calc */ +} +#padpage #editorcellinner { + position: relative; + zoom: 1; +} +#padpage #loadingbox { + padding-top: 100px; + padding-bottom: 100px; + font-size: 2.5em; + color: #aaa; + text-align: center; + position: absolute; + width: 100%; + height: 30px; + z-index: 100; +} +/*----------------------------------------------------------------*/ +/* userlist */ +/*----------------------------------------------------------------*/ +#sidebar div.sideheadwrap { + font-weight: normal; + font-size: 1.2em; + text-align: center; + padding: 3px 6px; + background: #eee url(/static/img/pad/sidehead-grad.gif) repeat-x bottom left; + border-bottom: 1px solid #666; + cursor: pointer; + zoom: 1; +} +#sidebar div.sh_hilited { + background-image: url(/static/img/oct/sidehead-gradhilite.gif); +} +#sidebar div.sideheadwrap p.sidehead { + display: block; + text-align: left; + padding: 0 0 0 18px; + margin: 0; +} +#sidebar div.sh_uncollapsed p.sidehead { + background: url(/static/img/pad/expandy-arrow6-down.gif) no-repeat center left; +} +#sidebar div.sh_collapsed p.sidehead { + background: url(/static/img/pad/expandy-arrow6-right.gif) no-repeat center left; +} +#sidebar div.sideheadwrap:hover { + cursor: pointer; + background: #bbb; +} +#sidebar div.sh_uncollapsed:hover p.sidehead { + background: url(/static/img/pad/expandy-arrow6-down-active.gif) no-repeat center left; +} +#sidebar div.sh_collapsed:hover p.sidehead { + background: url(/static/img/pad/expandy-arrow6-right-active.gif) no-repeat center left; +} +#sidebar div.sidebox { margin-bottom: 10px; } +#sidebar div#chatbox { margin-bottom: 2px; } +#sidebar div.sidebox_last { margin-bottom: 0; } +#sidebar #userlist div.userbox { + border-bottom: 1px solid #ccc; +} +#sidebar #userlist div.lastuser { + border-bottom: 0; +} +#sidebar #userlist div.userbox div.userinfo { + font-style: italic; + margin-top: 3px; +} +#sidebar #userlist div.userbox div.userinfo span.username { + padding-bottom: 4px; + font-size: 1.2em; +} +#sidebar #userlist div.userbox div.userinfo div.ip { + color: #999; + font-size: 1em; + margin-bottom: 3px; +} +#sidebar #userlist div.userbox div.usercolor { + border: 1px solid black; + width: 12px; + height: 12px; + float: left; + margin: 6px; + margin-top: 3px; + margin-left: 0; +} +#sidebar #userlist div.userbox div#rightuserlink { + float: right; + text-align: right; + width: 120px; +} +#sidebar #userlist a#changenamelink { + padding-right: 18px; + background: url(/static/img/pad/pencil-icon-small-blue.gif) no-repeat top right; +} +#sidebar #userlist div.userinfowrap { + padding: 6px 0 6px 6px; +} +#sidebar #userlist div.myuserwrap:hover { + cursor: pointer; + background: #eee; +} +/*----------------------------------------------------------------*/ +/* editing my user info */ +/*----------------------------------------------------------------*/ +#userlist div.edituserinfo { + color: black; + padding: 6px 0 12px 12px; +} +#userlist div.edituserinfo p { + font-size: 1.2em; + margin: 8px 4px; +} +#userlist div.edituserinfo h4 { + margin-top: 1em; + margin-left: 4px; + font-size: 1.3em; + color: black; + font-weight: bold; +} +#userlist div.edituserinfo input { + width: 260px; +} +#userlist div.edituserinfo button { + margin: 8px 4px; +} +#colorpicker a { + border: 3px solid #ccc; + text-decoration: none; + display: block; + width: 12px; + height: 12px; + float: left; + margin: 4px; + cursor: pointer; +} +#colorpicker a.selectedcolor { + border: 3px solid black; +} +#colorpicker a:hover { + border: 3px solid black; +} +/*----------------------------------------------------------------*/ +/* invitemore */ +/*----------------------------------------------------------------*/ +#sidebar #invitemore { + display: none; + text-align: center; + margin-top: 10px; + font-size: 1.1em; +} +#sidebar #invitemore input { + font-size: 1.1em; +} +#sidebar #invitemore a {} +#sidebar #invitemore #inviteinstructions { + background-color: #efe; + border: 1px solid #ccc; +} +#sidebar #invitemore #inviteinstructions p { + text-align: justify; + padding: .4em 1em; +} +#sidebar #invitemore #inviteinstructions p#hideinstructions { + text-align: center; +} +#sidebar #invitemore #inviteinstructions p#emailinviteleadin { + margin-top: .6em; +} +#sidebar #invite_email { width: 160px; } +#sidebar #invitemore #inviteinstructions #invite_email_submit {} +#sidebar #invitemore #invite_email_status { color: #642; } +/*----------------------------------------------------------------*/ +/* prefs */ +/*----------------------------------------------------------------*/ +#sidebar div#headprefs { border-top: 1px solid #666; } +#sidebar div#headfeedback { border-top: 1px solid #666; } +#sidebar div#headrevisions { border-top: 1px solid #666; } +#sidebar div#headchatbox { border-top: 1px solid #666; } +#sidebar div#headimportexport { border-top: 1px solid #666; } +#sidebar #prefs div.prefcheckbox { + margin: 0; + cursor: pointer; + border: 1px solid #fff; + font-size: 1em; +} +#sidebar #prefs div.prefcheckbox td.checkboxcell { + padding: 0 4px; +} +#sidebar #prefs div.prefcheckbox td.labelcell { + padding: 3px 4px; +} +#sidebar #prefs div.prefcheckbox:hover { + cursor: pointer; + background-color: #def; + border: 1px solid #aaa; +} +/*----------------------------------------------------------------*/ +/* revisions */ +/*----------------------------------------------------------------*/ +#sidebar #revisions { + text-align: center; +} +#sidebar #revisionlist {} +#sidebar #revisions input#savenow { + width: 260px; + margin-left: auto; margin-right: auto; + margin-top: 6px; margin-bottom: 6px; +} +#sidebar #revisions .revisioninfo { + text-align: left; + font-size: 1.1em; + border-top: 1px solid #ccc; + padding: 3px 2px 3px 6px; +} +#sidebar #revisions .revisioninfo .ractions { + color: #aaa; + font-size: 1em; +} +#sidebar #revisions .revisioninfo .rleft { + width: 96px; + float: left; +} +#sidebar #revisions .revisioninfo .editrlabel { + padding-left: 16px; + background: url(/static/img/pad/pencil-icon-small-blue.gif) no-repeat center left; +} +#sidebar #revisions .revisioninfo .rright { + margin-left: 18px; + color: #777; + font-style: italic; +} +#sidebar #revisions .revisionbottomlinks { + border-top: 1px solid #eee; + padding-top: 5px; + color: #888; + font-size: 1.1em; +} +#sidebar #revisions #nosaveprivs { + display: none; + color: #282; + font-size: 1.2em; + padding: 1em; +} +#sidebar #revisions p.revlabelprompt { + color: #444; + padding: 2px; +} +#sidebar #revisions input.inputrevlabel { + display: block; + width: 260px; + margin-left: auto; margin-right: auto; + margin-top: 6px; margin-bottom: 6px; + border: 1px solid #ccf; +} + +/*----------------------------------------------------------------*/ +/* feedback */ +/*----------------------------------------------------------------*/ +#sidebar #feedback { + background: #eee; + padding: 1px 8px; /* non-zero padding so that background extends */ + border-bottom: 1px solid #bbb; + text-align: center; + padding-bottom: 12px; +} +#sidebar #feedback p { + font-size: 1.1em; + margin: 10px 0; + color: #333; + text-align: justify; +} +#sidebar #feedback p em { + font-weight: bold; + font-style: italic; +} +#sidebar #feedback #formbox { + width: 260px; + margin-left: auto; + margin-right: auto; + zoom: 1; + positive: relative; +} +#sidebar #feedback textarea { + width: 100%; + margin-left: auto; + margin-right: auto; + height: 100px; +} +#sidebar #feedbacksubmit { + width: 100%; + text-align: center; + margin-left: auto; + margin-right: auto; +} +#sidebar #feedbackresult { + display: none; +} +/*----------------------------------------------------------------*/ +/* other */ +/*----------------------------------------------------------------*/ +a#newbutton { + font-family:"Lucida Grande", Tahoma, Arial, Verdana, sans-serif; + font-size:1.2em; + line-height:1.0; + margin:0 0 0 0; + text-decoration:none; + + background-color:#eee; + border:1px solid #999; + border-top: 1px solid #bbb; + border-bottom: 1px solid #666; + + padding:5px 5px 3px 5px; + + cursor:pointer; + font-weight:bold; + color:#555; + display: block; +} +a#newbutton:hover { + background-color: #ddd; + border: 1px solid #999; + color: #333; +} +a#newbutton img { + padding:0; + padding-bottom: 2px; + border:none; + width: 16px; + height: 16px; + vertical-align: middle; +} + +#framedpage #notice { + padding: 40px 20px; +} +#framedpage #notice p { + margin: 16px 0; +} + +img#plane { border: 0; vertical-align: middle; } + +/*----------------------------------------------------------------*/ +/* top msgs */ +/*----------------------------------------------------------------*/ + +div.topmsg { + zoom: 1; + margin: 5px 0; + position: relative; +} +div.topmsg a#hidetopmsg { + position: absolute; + right: 5px; + bottom: 5px; +} + +div#bigtoperror_wrap { + border: 1px solid #a66; + background: #fdd; + font-size: 1.2em; + padding: 1em; + padding-bottom: .5em; +} +div#bigtoperror_wrap p { + margin-bottom: 6px; + color: #222; +} +div#bigtoperror_wrap p.whynote { + color: #444; +} +div#bigtoperror_wrap p.whynote a { + color: #33f; +} +div#bigtoperror_wrap button.forcereconnect { + margin-top: 6px; +} +div#bigtoperror_wrap a { color: #00a; } +div#bigtoperror_wrap a:visited { color: #00a; } + +div#servermsg { + position: relative; + border: 1px solid #992; + background: #ffc; + padding: 1em; +} + +/*----------------------------------------------------------------*/ +/* chat */ +/*----------------------------------------------------------------*/ +#chatbox {} +#chatbox #chatmessages { + margin: 0; + margin-bottom: 2px; + height: 160px; + border: 1px solid #ccc; + overflow: auto; +} +#chatbox div.chatmessage { padding: 2px 0; } +#chatbox div.chatusermessage0 { background-color: #eee; } +#chatbox span.chatname { font-style: italic; } +#chatbox span.chattime { font-style: italic; color: #444; } +#chatbox span.chatline { color: #222; } +#chatbox input#chatinput { width: 100%; } +#chatbox #chatsaytable { + width: 270px; + margin-left: auto; + margin-right: auto; + padding: 0; + border-spacing: 0; +} +#chatbox #chatsaytable td { padding: 0 2px; } + +/*----------------------------------------------------------------*/ +/* import/export */ +/*----------------------------------------------------------------*/ + +#importexport td.exportpic a img { + border: 0; +} + +#importexport .exportspinner { + display: none; +} + +#importexport .exportspinner img { + margin-left: 7px; +} + +#importexport a.disabledexport { + color: gray; +} + +#importexport { + font-size: 1em; + font-family: verdana, helvetica, sans-serif; +} + +#importexport .exportlink { + margin: 2px 0; +} + +#importexport td.labelcell { + padding-left: 4px; +} + +#importexport td.firsttd { + padding-left: 10px; +} + +#importexport td.secondtd { + padding-left: 50px; +} + +#importexport #headexport { + font-size: 1.1em; + margin: 7px; + margin-top: 10px; +} + +#importexport #importsection { + border-top: 1px solid #ccc; + margin-top: 5px; + padding-top: 3px; +} + +#importexport .importformdiv { + padding: 5px 15px; +} + +#importexport #importformsubmitdiv { + margin-top: 5px; +} + +.importformenabled { + background: #cfc; + border-top: 1px solid #292; + border-bottom: 1px solid #292; +} + +#importexport #headimport { + font-size: 1.1em; + margin: 7px; +} + +#importexport .importmessage { + display: none; + border: 1px solid #992; + background: #ffc; + padding: 5px; +} + +#importexport #exportmessage { + display: none; + border: 1px solid #992; + background: #ffc; + padding: 5px; + margin: 10px 15px; +} + +#importexport #importmessagefail { + margin-top: 10px; + margin-bottom: 5px; +} + +#importexport #importmessagesuccess { + margin: 0 20px; +} + +#importexport #importstatusball { + display: none; + padding-bottom: 3px; +} + +#importexport #importarrow { + display: none; + margin-left: 5px; +} + +span.nowrap { + white-space: nowrap; +} + +#sidebar #prefs div.prefcheckbox { + margin: 0; + cursor: pointer; + border: 1px solid #fff; + font-size: 1em; +} +#sidebar #prefs div.prefcheckbox td.checkboxcell { + padding: 0 4px; +} +#sidebar #prefs div.prefcheckbox td.labelcell { + padding: 3px 4px; +} +#sidebar #prefs div.prefcheckbox:hover { + cursor: pointer; + background-color: #def; + border: 1px solid #aaa; +} + +/*----------------------------------------------------------------*/ +/* modal dialogs */ +/*----------------------------------------------------------------*/ + +#modaloverlay { + position: absolute; + z-index: 100; + background-image: url(/static/img/apr09/black35.png); + zoom: 1; + display: none; + left: 0; top: 0; + width: 100%; +} + +* html #modaloverlay { /* for IE 6+ */ + background-color: transparent; + background-image: url(/static/img/apr09/blank.gif); + filter: progid:DXImageTransform.Microsoft.AlphaImageLoader(src="/static/img/apr09/black35.png", sizingMethod="scale"); +} + +#modaldialog { + border: 1px solid #333; + background: #ddd; + width: 400px; + margin-left: auto; + margin-right: auto; + position: relative; +} + +#dialogtopbar { + height: 18px; + border-bottom: 1px solid #333; + background: #2e609e url(/static/img/apr09/modalbar.gif) repeat-x left top; + color: #cbd7e7; + font-size: 1.0em; + font-weight: bold; + line-height: 18px; + padding-left: 10px; + cursor: default; +} + +td#dialogcontent { + padding: 10px; + height: 100px; + vertical-align: top; +} + +table#dialogcontenttable { width: 100%; } diff --git a/trunk/etherpad/src/static/css/pad2_ejs.css b/trunk/etherpad/src/static/css/pad2_ejs.css new file mode 100644 index 0000000..253b8e2 --- /dev/null +++ b/trunk/etherpad/src/static/css/pad2_ejs.css @@ -0,0 +1,889 @@ + +*,html.body { margin: 0; padding: 0; } + +h1, h2, h3, h4, h5, h6 { display: inline; line-height: 2em; } + +.clear { clear: both; } + +html { font-size: 62.5%; } + +body { background: #ebebeb url(/static/img/jun09/pad/backgrad.gif) repeat-x left top; } +body, textarea { font-family: Arial, sans-serif; } + +#padpage { margin-left: auto; margin-right: auto; width: 900px; } + +body.fullwidth #padpage { width: auto; margin-left: 6px; margin-right: 6px; min-width: 800px; } +body.squish1width #padpage { width: 900px; } +body.squish2width #padpage { width: 800px; } + +#topbar { height: 25px; background: #326cbd url(/static/img/jun09/pad/padtopback2.gif) repeat-x left top; + position: relative; } + +#topbarleft { float: left; height: 100%; overflow: hidden; + background: url(/static/img/jun09/pad/padtop5.png) no-repeat left top; width: 5px; } +#topbarright { float: right; height: 100%; overflow: hidden; + background: url(/static/img/jun09/pad/padtop5.png) no-repeat right top; width: 5px; } + +.propad #topbar { background: #2c2c2c url(/static/img/jun09/pad/protop.png) repeat-x 0 -25px; } +.propad #topbarleft { background: url(/static/img/jun09/pad/protop.png) no-repeat left top; } +.propad #topbarright { background: url(/static/img/jun09/pad/protop.png) no-repeat right top; } + +/* +a#topbarnewpad { display: block; float: left; position: relative; top: 4px; width: 94px; + height: 0; padding-top: 26px; overflow: hidden; + background: url(/static/img/jun09/pad/padtop5.png) no-repeat -5px -4px; } +a#topbarnewpad:focus { outline: 0; } + +a#topbarfullwidth { display: block; float: right; position: relative; top: 2px; width: 107px; + height: 0; padding-top: 27px; overflow: hidden; + background: url(/static/img/jun09/pad/padtop5.png) no-repeat -788px -2px; } +a#topbarfullwidth:focus { outline: 0; } +*/ + +a#backtoprosite, #accountnav { + display: block; position: absolute; height: 15px; line-height: 15px; + width: auto; top: 5px; font-size: 1.2em; +} +a#backtoprosite, #accountnav a { color: #cde7ff; text-decoration: underline; } + +a#backtoprosite { padding-left: 20px; left: 6px; + background: url(/static/img/jun09/pad/protop.png) no-repeat -5px -6px; } +#accountnav { right: 10px; color: #fff; } + +#topbarcenter { margin-left: 150px; margin-right: 150px; } +a#topbaretherpad { margin-left: auto; margin-right: auto; display: block; width: 127px; + position: relative; top: 0px; height: 0; padding-top: 25px; + background: url(/static/img/jun09/pad/padtop5.png) no-repeat -397px 0px; overflow: hidden; } + +.propad a#topbaretherpad { background: url(/static/img/jun09/pad/protop.png) no-repeat -397px 0px; } + +#specialkeyarea { top: 5px; left: 250px; color: yellow; font-weight: bold; + font-size: 1.5em; position: absolute; } + +#alertbar { margin-top: 6px; +opacity: 0; filter: alpha(opacity = 0); /* IE */ +display: none; +} + +#servermsg { position: relative; zoom: 1; border: 1px solid #992; + background: #ffc; padding: 0.8em; font-size: 1.2em; } +#servermsg h3 { font-weight: bold; margin-right: 10px; + margin-bottom: 1em; float: left; width: auto; } +#servermsg #servermsgdate { font-style: italic; font-weight: normal; color: #666; } +a#hidetopmsg { position: absolute; right: 5px; bottom: 5px; } + +#shuttingdown { position: relative; zoom: 1; border: 1px solid #992; + background: #ffc; padding: 0.6em; font-size: 1.2em; margin-top: 6px; } + +#docbar { margin-top: 6px; height: 30px; position: relative; zoom: 1; + background: #fbfbfb url(/static/img/jun09/pad/padtopback2.gif) repeat-x 0 -31px; } + +#docbarleft { position: absolute; left: 0; top: 0; height: 100%; + overflow: hidden; + background: url(/static/img/jun09/pad/padtop5.png) no-repeat left -31px; width: 7px; } + +<% function docbarButton(name, width, imgleft, posright, hoverimgleft, openimgleft) { + return ("#docbar$name$-outer { width: "+width+"px; position: absolute; height: 30px; top: 0; right: "+posright+"px; "+ + "background: url(/static/img/jun09/pad/padtop5.png) no-repeat "+(-imgleft)+"px -31px; "+ + "/* avoid IE flicker using double background */ }"+ + "a#docbar$name$ { display: block; height: 0; padding-top: 30px; position: absolute; width: 100%; "+ + "overflow: hidden; background: url(/static/img/jun09/pad/padtop5.png) no-repeat "+(-imgleft)+"px -31px; "+ + "z-index: 53; /* > .dbpanel-wrapper */} "+ + "a#docbar$name$:focus { outline: 0; } "+ + "a#docbar$name$:hover { background: url(/static/img/jun09/pad/docbarstates3.png) no-repeat "+(-hoverimgleft)+"px 0; } "+ + ".docbar$name$-opening a#docbar$name$, .docbar$name$-opening a#docbar$name$:hover, .docbar$name$-closing a#docbar$name$, .docbar$name$-closing a#docbar$name$:hover, .docbar$name$-open a#docbar$name$, .docbar$name$-open a#docbar$name$:hover { "+ + "background: url(/static/img/jun09/pad/docbarstates3.png) no-repeat "+(-openimgleft)+"px 0; } "+ + "a#docbar$name$:hover, .docbar$name$-closing a#docbar$name$ { padding-top: 29px; } "+ + ".docbar$name$-opening a#docbar$name$, .docbar$name$-opening a#docbar$name$:hover { "+ + "/* opening or closing: link covers gray line below it */ "+ + "padding-top: 30px; }"+ + ".docbar$name$-open a#docbar$name$, .docbar$name$-open a#docbar$name$:hover { "+ + "/* link covers gray line below it, and also top highlight of panel */ "+ + "padding-top: 30px; }").replace(/\$name\$/g, name); +} %> + +<% // include left border, not right %> +<%= docbarButton("savedrevs", 128, 669, 103, 123, 123) %> +<%= docbarButton("impexp", 122, 547, 231, 0, 0) %> +<%= docbarButton("options", 109, 438, 353, 379, 379) %> +<%= docbarButton("security", 85, 353, 462, 489, 489) %> + +#docbarslider-outer { width: 104px; position: absolute; height: 30px; top: 0; right: 0; + background: url(/static/img/jun09/pad/padtop5.png) no-repeat -796px -31px; + /* avoid IE flicker using double background */ } +a#docbarslider { display: block; height: 0; padding-top: 30px; position: absolute; width: 100%; + overflow: hidden; background: url(/static/img/jun09/pad/padtop5.png) no-repeat -796px -31px; z-index: 53; /* > .dbpanel-wrapper */} + +<% /* changing the size of the title / rename area means adjusting + the #docbarpadtitle.width, #padtitlebuttons.left, + and #padtitleedit.width */ %> + +#docbarpadtitle { position: absolute; height: auto; left: 9px; + width: 280px; font-size: 1.6em; color: #444; font-weight: normal; + line-height: 22px; margin-left: 2px; height: 22px; top: 4px; + overflow: hidden; text-overflow: ellipsis /*not supported in FF*/; + white-space:nowrap; } +.docbar-public #docbarpadtitle { padding-left: 22px; + background: url(/static/img/jun09/pad/public.gif) no-repeat left center; } + +#docbarrenamelink { position: absolute; top: 9px; + font-size: 1.1em; display: none; } +#docbarrenamelink a { color: #999; } +#docbarrenamelink a:hover { color: #48d; } +#padtitlebuttons { position: absolute; width: 120px; zoom: 1; + height: 22px; top: 4px; left: 223px; display: none; + background: url(/static/img/jun09/pad/padtop5.png) -19px -35px; } +#padtitlesave { position: absolute; display: block; + height: 0; padding-top: 22px; overflow: hidden; + width: 49px; left: 0; top: 0; } +#padtitlecancel { position: absolute; display: block; + height: 0; padding-top: 22px; overflow: hidden; + width: 49px; right: 0; top: 0; } +#padtitleedit { position: absolute; top: 4px; left: 5px; + height: 17px; padding: 2px; font-size: 1.4em; + background: white; border-left: 1px solid #c3c3c3; + border-top: 1px solid #c3c3c3; + border-right: 1px solid #e6e6e6; border-bottom: 1px solid #e6e6e6; + width: 207px; display: none; +} + +#padmain { margin-top: 6px; position: relative; zoom: 1; } + +#padeditor { margin-right: 300px; zoom: 1; } +.hidesidebar #padeditor { margin-right: 0; } + +#editbar { height: 36px; + background: #a5bfe2 url(/static/img/jun09/pad/editbar3.png) repeat-x left -36px; position: relative; } + +#editbarleft { float: left; height: 100%; overflow: hidden; + background: url(/static/img/jun09/pad/editbar3.png) no-repeat left top; width: 3px; } +#editbarright { float: right; height: 100%; overflow: hidden; + background: url(/static/img/jun09/pad/editbar3.png) no-repeat right top; width: 3px; } + +#editbar a.editbarbutton { + display: block; + position: absolute; + height: 26px; + width: 26px; + background-image: url(/static/img/jun09/pad/editbar3.png); + background-color: transparent; + background-repeat: no-repeat; + text-decoration: none; + top: 5px; +} +#editbar.disabledtoolbar a.editbarbutton { + opacity: 0.5; + filter: alpha(opacity = 50); /* IE */ + zoom: 1; + cursor: auto; +} +/*#editbar .divider { position: absolute; width: 4px; height: 15px; + background-image: url(/static/img/jun09/pad/editbar3.png); + background-color: transparent; background-repeat: no-repeat; } +#editbar .divider1 { left: 137px; top: 11px; background-position: -137px -11px; } +#editbar .divider2 { left: 188px; top: 11px; background-position: -188px -11px; }*/ +#editbar a:focus { outline: 0; } + +<% function editbarButton(name, pos, width, fromRight) { + width = width || 26; + var bposX = - (fromRight ? 600-width-pos : pos); + return "div#editbar a."+name+" { "+ + (fromRight?'right':'left')+": "+pos+"px; background-position: "+ + bposX+"px -5px; width: "+width+"px; }\n"+ + "div#padeditor div.enabledtoolbar a."+name+":active { background-position: "+ + bposX+"px -77px; }"; +} %> +<%= editbarButton('bold', 7, 25) %> +<%= editbarButton('italic', 32, 23) %> +<%= editbarButton('underline', 55, 23) %> +<%= editbarButton('strikethrough', 78, 24) %> +<%= editbarButton('h1', 108, 25) %> +<%= editbarButton('h2', 133, 23) %> +<%= editbarButton('h3', 156, 23) %> +<%= editbarButton('h4', 179, 23) %> +<%= editbarButton('h5', 202, 23) %> +<%= editbarButton('h6', 225, 24) %> +<%= editbarButton('clearauthorship', 342) %> +<%= editbarButton('undo', 374, 25) %> +<%= editbarButton('redo', 399, 24) %> +<%= editbarButton('insertunorderedlist', 255) %> +<%= editbarButton('indent', 287, 25) %> +<%= editbarButton('outdent', 312, 24) %> +<%= editbarButton('save', 6, null, true) %> + +#editbar #syncstatussyncing { position: absolute; height: 26px; width: 26px; + background: url(/static/img/jun09/pad/syncing2.gif) no-repeat center center; + right: 38px; top: 5px; display: none; } +#editbar #syncstatusdone { position: absolute; height: 26px; width: 26px; + background: url(/static/img/jun09/pad/syncdone.gif) no-repeat center center; + right: 38px; top: 5px; display: none; } + +#editorcontainerbox { + border-left: 1px solid #c4c4c4; border-right: 1px solid #c4c4c4; + border-bottom: 1px solid #c4c4c4; + background: #fff; overflow: hidden; position: relative; + zoom: 1; height: 397px; /*...initially*/ } + +#editorcontainer { height: 100%; } + +#editorcontainer iframe { width: 100%; padding: 0; margin: 0; } + +#editorloadingbox { padding-top: 100px; padding-bottom: 100px; font-size: 2.5em; color: #aaa; + text-align: center; position: absolute; width: 100%; height: 30px; z-index: 100; } + +#padsidebar { float: right; width: 290px; } +.hidesidebar #padsidebar { width: 0; overflow: hidden; } + +#padusers { border: 1px solid #c4c4c4; background: #fafafa; position: relative; zoom: 1; } + +#myuser { background: #d9e7f9; padding: 5px; height: 53px; position: relative; } +#myswatchbox { position: absolute; left: 5px; top: 5px; width: 22px; height: 22px; + /*border-top: 1px solid #c3cfe0; border-left: 1px solid #c3cfe0; + border-right: 1px solid #ecf3fc; border-bottom: 1px solid #ecf3fc;*/ + border: 1px solid #bbb; + padding: 1px; background: transparent; cursor: pointer; } +#myuser .myswatchboxhoverable, #myuser .myswatchboxunhoverable { + background: white; +} +#myuser .myswatchboxhoverable:hover { + background: #bbb; +} +#myswatch { width: 100%; height: 100%; background: transparent;/*...initially*/ } +#mycolorpicker { + background: url(/static/img/jun09/pad/colorpicker.gif) no-repeat left top; + width: 232px; height: 76px; + position: absolute; + left: 13px; top: 13px; z-index: 101; + display: none;/*...initially*/ +} +#mycolorpicker .n1 { left: 13px; } +#mycolorpicker .n2 { left: 40px; } +#mycolorpicker .n3 { left: 67px; } +#mycolorpicker .n4 { left: 94px; } +#mycolorpicker .n5 { left: 121px; } +#mycolorpicker .n6 { left: 148px; } +#mycolorpicker .n7 { left: 175px; } +#mycolorpicker .n8 { left: 202px; } +#mycolorpicker .pickerswatchouter { + border: 1px solid white; + width: 15px; height: 15px; position: absolute; + top: 12px; +} +#mycolorpicker .pickerswatch { + border: 1px solid #999; + width: 13px; + height: 13px; + position: absolute; + left: 0; top: 0; +} +#mycolorpicker .picked { border: 1px solid #666 !important; } +#mycolorpicker .picked .pickerswatch { border: 1px solid #666; } +#mycolorpickersave { position: absolute; left: 14px; top: 42px; + width: 47px; height: 0; padding-top: 20px; overflow: hidden; + cursor: pointer; } +#mycolorpickercancel { position: absolute; left: 87px; top: 42px; + width: 44px; height: 0; padding-top: 20px; overflow: hidden; + cursor: pointer; } +#myusernameform { margin-left: 35px; } +#myusernameedit { font-size: 1.6em; color: #444; + padding: 3px; height: 18px; margin: 0; border: 0; + width: 197px; background: transparent; } +#myusernameform input.editable { border: 1px solid #bbb; } +#myuser .myusernameedithoverable:hover { background: white; } +#mystatusform { margin-left: 35px; margin-top: 5px; } +#mystatusedit { font-size: 1.2em; color: #777; + font-style: italic; display: none; + padding: 2px; height: 14px; margin: 0; border: 1px solid #bbb; + width: 199px; background: transparent; } +#myusernameform .editactive, #myusernameform .editempty { + background: white; border-left: 1px solid #c3c3c3; + border-top: 1px solid #c3c3c3; + border-right: 1px solid #e6e6e6; border-bottom: 1px solid #e6e6e6; +} +#myusernameform .editempty { color: #ef641e; } + +#otherusers { + height: 100px;/*...initially*/ + overflow: auto; +} + +table#otheruserstable { display: none; } +#nootherusers { padding: 10px; font-size: 1.2em; color: #999; font-weight: bold;} +#nootherusers a { color: #48d; } + +#otheruserstable td { + border-bottom: 1px solid #e1e1e1; + height: 26px; + vertical-align: middle; + padding: 0 2px; +} + +#otheruserstable .swatch { + border: 1px solid #999; width: 13px; height: 13px; overflow: hidden; + margin: 0 4px; +} + +.usertdswatch { width: 1%; } +.usertdname { font-size: 1.3em; color: #444; } +.usertdstatus { font-size: 1.1em; font-style: italic; color: #999; } +.usertdactivity { font-size: 1.1em; color: #777; } + +.usertdname input { border: 1px solid #bbb; width: 80px; padding: 2px; } +.usertdname input.editactive, .usertdname input.editempty { + background: white; border-left: 1px solid #c3c3c3; + border-top: 1px solid #c3c3c3; + border-right: 1px solid #e6e6e6; border-bottom: 1px solid #e6e6e6; +} +.usertdname input.editempty { color: #888; font-style: italic;} + +#userlistbuttonarea { height: 28px; position: relative; + background: url(/static/img/jun09/pad/inviteshare2.gif) repeat-x 0 0; } +#sharebutton { + background: url(/static/img/jun09/pad/inviteshare2.gif) no-repeat 0 -31px; + position: absolute; display: block; top: 3px; padding-top: 23px; + height: 0; overflow: hidden; width: 96px; left: 96px; } + + /*#guestslabel { font-size: 1.2em; position: absolute; width: auto; + height: 22px; line-height: 22px; top: 4px; left: 8px; } +#guestsmenu { font-size: 1.2em; position: absolute; left: 100px; + top: 5px; width: 95px; } +.guestpolicystuff { display: none; }*/ + +.guestprompt { border: 1px solid #ccc; font-size: 1.2em; + padding: 5px; color: #222; background: #ffc; } +.guestprompt .choices { float: right; } +.guestprompt a { margin: 0 0.5em; } + +#hdraggie { + background: url(/static/img/jun09/pad/hdraggie.gif) repeat-x center top; + height: 10px; cursor: S-resize; } + +#padchat { border: 1px solid #c4c4c4; } + +#chattop { background: #ecf2fa; padding: 5px; font-size: 1.2em; border-bottom: 1px solid #ddd; } +#chattop a { color: #36b; } +#chatlines { height: 198px;/*...initially*/ overflow: auto; background: #fafafa; position: relative; } +#chatlines .chatline { color: #444; padding-left: 5px; padding-top: 2px; padding-bottom: 2px; + background: #ddd; overflow: hidden; } +#chatlines .chatlinetime { display: block; font-size: 1em; color: #666; float: right; width: auto; + padding-right: 5px; } +#chatlines .chatlinename, #chatlines .chatlinetext { font-size: 1.2em; } +#chatlines h2 { margin: 0; padding-left: 5px; padding-top: 2px; padding-bottom: 2px; color: #999; font-style: italic; font-weight: bold; font-size: 1.2em; } +#chatbottom { background: #ecf2fa; padding: 4px; } +#chatprompt { font-size: 1.2em; color: #444; float: left; line-height: 22px; width: 35px; text-align: right; } +#chatentryform { margin-left: 40px; } +#chatentrybox { font-size: 1.2em; color: #444; + padding: 2px; height: 16px; margin: 0; border-left: 1px solid #c3c3c3; + border-top: 1px solid #c3c3c3; + border-right: 1px solid #e6e6e6; border-bottom: 1px solid #e6e6e6; + width: 230px; } +#padchat a#chatloadmore { display: none; font-size: 1.2em; padding: 2px 5px; font-style: italic; } +#padchat #chatloadingmore { display: none; font-size: 1.2em; padding: 2px 5px; font-style: italic; + color: #999; } +#padchat a#chatloadmore:focus { outline: 0; } + +#djs { font-family: monospace; font-size: 10pt; + height: 200px; overflow: auto; border: 1px solid #ccc; + background: #fee; margin: 0; padding: 6px; +} +#djs p { margin: 0; padding: 0; display: block; } + +#connectionbox { + position: absolute; left: 0; top: 0; width: 100%; + height: 191px;/*...initially; #padusers height */ + z-index: 10; zoom: 1; overflow: hidden; +} +#connectionboxinner { + position: relative; width: 100%; height: 100%; overflow: hidden; +} +.cboxconnecting #connectionboxinner { + background: #ffd url(/static/img/jun09/pad/connectingbar.gif) no-repeat center 60px; +} +.cboxreconnecting #connectionboxinner { + background: #fed url(/static/img/jun09/pad/connectingbar.gif) no-repeat center 60px; +} +.cboxdisconnected #connectionboxinner { + background: #fdd; +} +.cboxdisconnected #connectionboxinner div { display: none; } +.cboxdisconnected_userdup #connectionboxinner #disconnected_userdup { display: block; } +.cboxdisconnected_initsocketfail #connectionboxinner #disconnected_initsocketfail { display: block; } +.cboxdisconnected_looping #connectionboxinner #disconnected_looping { display: block; } +.cboxdisconnected_slowcommit #connectionboxinner #disconnected_slowcommit { display: block; } +.cboxdisconnected_unauth #connectionboxinner #disconnected_unauth { display: block; } +.cboxdisconnected_unknown #connectionboxinner #disconnected_unknown { display: block; } +.cboxdisconnected_initsocketfail #connectionboxinner #reconnect_advise, +.cboxdisconnected_looping #connectionboxinner #reconnect_advise, +.cboxdisconnected_slowcommit #connectionboxinner #reconnect_advise, +.cboxdisconnected_unknown #connectionboxinner #reconnect_advise { display: block; } +.cboxdisconnected div#reconnect_form { display: block; } +.cboxdisconnected .disconnected h2 { display: none; } +.cboxdisconnected .disconnected .h2_disconnect { display: block; } +.cboxdisconnected_userdup .disconnected h2.h2_disconnect { display: none; } +.cboxdisconnected_userdup .disconnected h2.h2_userdup { display: block; } +.cboxdisconnected_unauth .disconnected h2.h2_disconnect { display: none; } +.cboxdisconnected_unauth .disconnected h2.h2_unauth { display: block; } + +#connectionstatus { + position: absolute; width: 37px; height: 32px; overflow: hidden; + right: 0; + z-index: 11; +} +#connectionboxinner .connecting { + margin-top: 20px; + font-size: 2.0em; color: #555; + text-align: center; display: none; +} +.cboxconnecting #connectionboxinner .connecting { display: block; } + +#connectionboxinner .disconnected h2 { + font-size: 1.8em; color: #333; + text-align: left; + margin-top: 10px; margin-left: 10px; margin-right: 10px; + margin-bottom: 10px; +} +#connectionboxinner .disconnected p { + margin: 10px 10px; + font-size: 1.2em; + line-height: 1.1; + color: #333; +} +#connectionboxinner .disconnected { display: none; } +.cboxdisconnected #connectionboxinner .disconnected { display: block; } + +#connectionboxinner .reconnecting { + margin-top: 20px; + font-size: 1.6em; color: #555; + text-align: center; display: none; +} +.cboxreconnecting #connectionboxinner .reconnecting { display: block; } + +#reconnect_form button { + position: relative; width: 268px; height: 28px; left: 10px; + font-size: 12pt; +} + +/* We give docbar a higher z-index than its descendant impexp-wrapper in + order to allow the Import/Export panel to be on top of stuff lower + down on the page in IE. Strange but it works! */ +#docbar { z-index: 52; } + +#impexp-wrapper { width: 500px; right: 10px; } +#impexp-panel { height: 160px; } +.docbarimpexp-closing #impexp-wrapper { z-index: 50; } + +#savedrevs-wrapper { width: 100%; left: 0; } +#savedrevs-panel { height: 79px; } +.docbarsavedrevs-closing #savedrevs-wrapper { z-index: 50; } +#savedrevs-wrapper .dbpanel-rightedge { background-position: 0 -10px; } + +#options-wrapper { width: 340px; right: 200px; } +#options-panel { height: 114px; } +.docbaroptions-closing #options-wrapper { z-index: 50; } + +#security-wrapper { width: 320px; right: 300px; } +#security-panel { height: 130px; } +.docbarsecurity-closing #security-wrapper { z-index: 50; } + +#revision-notifier { position: absolute; right: 8px; top: 25px; + width: auto; height: auto; font-size: 1.2em; background: #ffc; + border: 1px solid #aaa; color: #444; padding: 3px 5px; + display: none; z-index: 55; } +#revision-notifier .label { color: #777; font-weight: bold; } + +/* We don't ever actually hide the wrapper, even when the panel is + cloased, so that its contents can always be manipulated accurately. */ +.dbpanel-wrapper { position: absolute; + overflow: hidden; /* animated: */ height: 0; top: 30px; /* /animated */ + z-index: 51; zoom: 1; } +.dbpanel-panel { position: absolute; bottom: 0; width: 100%; } + +.dbpanel-middle { margin-left: 7px; margin-right: 7px; + position: relative; height: 100%; overflow: hidden; zoom: 1; } +.dbpanel-inner { background: #f7f7f7 /* covered up by images */; + width: 100%; height: 100%; position: absolute; overflow: hidden; top: -10px; } + +.dbpanel-top { position: absolute; top: 0; width: 100%; + height: 400px; background-image: url(/static/img/jun09/pad/docpanelmiddle2.png); + background-position: left top; } + +.dbpanel-bottom { position: absolute; height: 400px; + bottom: -390px; width: 100%; + background-image: url(/static/img/jun09/pad/docpanelmiddle2.png); + background-position: left top; +} + +* html .dbpanel-top, * html .dbpanel-bottom { /* for IE 6+ */ + background-color: transparent; + background-image: url(/static/img/apr09/blank.gif); + /* scale the image instead of repeating, but it amounts to the same */ + filter: progid:DXImageTransform.Microsoft.AlphaImageLoader(src="/static/img/jun09/pad/docpanelmiddle2.png", sizingMethod="scale"); +} + +.dbpanel-leftedge, .dbpanel-rightedge, .dbpanel-botleftcorner, .dbpanel-botrightcorner { + position: absolute; + background-repeat: no-repeat; + background-color: transparent; + background-image: url(/static/img/jun09/pad/docpaneledge2.png); +} + +.dbpanel-leftedge, .dbpanel-rightedge { height: 100%; width: 7px; bottom: 11px; } +.dbpanel-botleftcorner, .dbpanel-botrightcorner { height: 11px; width: 7px; bottom: 0; } + +.dbpanel-leftedge, .dbpanel-botleftcorner { left: 0; background-position: -7px 0; } +.dbpanel-rightedge, .dbpanel-botrightcorner { right: 0; background-position: 0 0; } + +#importexport { position: absolute; top: 5px; left: 0; font-size: 1.2em; color: #444; + height: 100%; width: 100%; } + +* html .dbpanel-leftedge, * html .dbpanel-rightedge, * html .dbpanel-botleftcorner, * html .dbpanel-botrightcorner { + background-color: transparent; + background-image: url(/static/img/apr09/blank.gif); + /* crop the image */ + filter: progid:DXImageTransform.Microsoft.AlphaImageLoader(src="/static/img/jun09/pad/docpaneledge2.png", sizingMethod="crop"); +} +* html .dbpanel-leftedge, * html .dbpanel-botleftcorner { left: -7px; width: 14px; } + +#impexp-importlabel { position: absolute; top: 5px; left: 10px; width: 300px; } + +#importform { position: absolute; top: 24px; left: 5px; width: 300px; height: 60px; } +#importformsubmitdiv, #importformfilediv { padding: 5px 5px; } +#importexport .importformenabled { + background: #cfc; + border: 1px solid #292; +} +#importexport span.nowrap { white-space: nowrap; } +#importexport #importstatusball { margin-left: 3px; padding-top: 1px; display: none; } +#importexport #importarrow { margin-left: 5px; padding-top: 1px; display: none; } +#importexport .importmessage { border: 1px solid #992; + background: #ffc; padding: 5px; font-size: 85%; display: none; } +#importexport #importmessagefail { margin-top: 5px; } +#importexport #importmessagesuccess { margin: 0 20px; } +#importexport a.disabledexport { + color: #333; text-decoration: none; + opacity: 0.5; filter: alpha(opacity = 50) /*IE*/; +} +#importexport #importfileinput { padding: 2px 0; } +#importexport #importsubmitinput { padding: 2px; } + +#impexp-divider { position: absolute; left: 320px; top: 5px; height: 135px; width: 2px; + background: #ddd; } +#impexp-close { display: block; position: absolute; right: 2px; bottom: 15px; + width: auto; height: auto; font-size: 85%; color: #444; + z-index: 61 /* > clickcatcher */} +#impexp-disabled-clickcatcher { + display: none; + position: absolute; width: 100%; height: 100%; + z-index: 60; +} + +#impexp-exportlabel { position: absolute; top: 5px; left: 350px; + width: 300px; } +#exportlinks .exportlink { + display: block; position: absolute; height: 22px; width: auto; + background-repeat: no-repeat; + background-image: url(/static/img/jun09/pad/fileicons.gif); + line-height: 22px; padding-left: 22px; padding-right: 2px; +} +#exportlinks .n1 { left: 350px; top: 30px; } +#exportlinks .n2 { left: 350px; top: 57px; } +#exportlinks .n3 { left: 350px; top: 84px; } +#exportlinks .n4 { left: 485px; top: 30px; } +#exportlinks .n5 { left: 485px; top: 57px; } +#exportlinks .n6 { left: 485px; top: 84px; } +#exportlinks .exporthrefdoc { background-position: 2px -1px; } +#exportlinks .exporthrefhtml { background-position: 2px -25px; } +#exportlinks .exporthreflink { background-position: 2px -49px; } +#exportlinks .exporthrefodt { background-position: 2px -73px; } +#exportlinks .exporthrefpdf { background-position: 2px -97px; } +#exportlinks .exporthreftxt { background-position: 2px -121px; } + +#savedrevisions { position: absolute; top: 0; left: 0; font-size: 1.2em; + color: #444; height: 100%; width: 100%; } +#savedrevs-scrolly { height: 75px; width: auto; margin-right: 136px; + overflow: hidden; position: relative; top: 1px; +} +#savedrevs-scrollleft { height: 100%; width: 14px; position: absolute; + left: 0; top: 0; cursor: pointer; + background: url(/static/img/jun09/pad/savedrevarrows.gif) no-repeat right top; +} +#savedrevs-scrollright { height: 100%; width: 14px; position: absolute; + right: 0; top: 0; cursor: pointer; + background: url(/static/img/jun09/pad/savedrevarrows.gif) no-repeat left top; +} +#savedrevs-scrolly .disabledscrollleft { background-position: right bottom; } +#savedrevs-scrolly .disabledscrollright { background-position: left bottom; } +#savedrevs-scrollouter { margin-left: 14px; margin-right: 14px; + width: auto; height: 100%; overflow: hidden; position: relative; +} +#savedrevs-scrollinner { position: absolute; width: 1px; height: 100%; + overflow: visible; right: 0/*...initially*/; top: 0; } +#savedrevisions .srouterbox { width: 120px; height: 100%; + position: absolute; top: 0; +} +#savedrevisions .srinnerbox { position: relative; top: 8px; + height: 59px; width: auto; border-left: 1px solid #ddd; + padding: 0 8px 0 8px; } +#savedrevisions a.srname { display: block; white-space: nowrap; + text-overflow: ellipsis /*no FF support*/; overflow: hidden; + text-decoration: none; color: #444; cursor: text; + padding: 1px; height: 14px; position: relative; left: -1px; + width: 100px /*specify for proper overflow in IE*/; +} +#savedrevisions a.srname:hover { text-decoration: none; color: #444; + border: 1px solid #ccc; padding: 0; } +#savedrevisions .sractions { font-size: 85%; color: #ccc; + margin-top: 1px; height: 12px; } +#savedrevisions .sractions a { text-decoration: none; + color: #06c; } +#savedrevisions .sractions a:hover { text-decoration: underline; } +#savedrevisions .srtime { color: #666; font-size: 90%; + white-space: nowrap; margin-top: 3px; } +#savedrevisions .srauthor { color: #666; font-size: 90%; + white-space: nowrap; overflow: hidden; text-overflow: ellipsis /*no FF*/; +} +#savedrevisions .srtwirly { position: absolute; display: block; + bottom: 0; right: 10px; display: none; } +#savedrevisions .srnameedit { + position: absolute; +} +#savedrevs-savenow { display: block; position: absolute; + overflow: hidden; height: 0; padding-top: 24px; width: 81px; + top: 22px; right: 27px; + background: url(/static/img/jun09/pad/savedrevsgfx2.gif) no-repeat 0 0; +} +#savedrevs-savenow:active { background-position: 0 -24px; } +#savedrevs-close { display: block; position: absolute; right: 7px; bottom: 8px; + width: auto; height: auto; font-size: 85%; color: #444; } +form#reconnectform { display: none; } + +#padoptions { position: absolute; top: 0; left: 0; font-size: 1.2em; + color: #444; height: 100%; width: 100%; line-height: 15px; } +#options-viewhead { font-weight: bold; position: absolute; top: 10px; left: 15px; + width: auto; height: auto; } +#padoptions label { display: block; } +#padoptions input { padding: 0; margin: 0; } +#options-colorscheck { position: absolute; left: 15px; top: 34px; width: 15px; height: 15px; } +#options-colorslabel { position: absolute; left: 35px; top: 34px; } +#options-linenoscheck { position: absolute; left: 15px; top: 57px; width: 15px; height: 15px; } +#options-linenoslabel { position: absolute; left: 35px; top: 57px; } +#options-fontlabel { position: absolute; left: 15px; top: 82px; } +#viewfontmenu { position: absolute; top: 80px; left: 90px; width: 110px; } +#options-viewexplain { position: absolute; left: 215px; top: 15px; width: 100px; height: 70px; + padding-left: 10px; padding-top: 10px; border-left: 1px solid #ccc; + line-height: 20px; font-weight: bold; color: #999; } +#options-close { display: block; position: absolute; right: 7px; bottom: 8px; + width: auto; height: auto; font-size: 85%; color: #444; } + +#padsecurity { position: absolute; top: 0; left: 0; font-size: 1.2em; + color: #444; height: 100%; width: 100%; line-height: 15px; } +#security-close { display: block; position: absolute; right: 7px; bottom: 8px; + width: auto; height: auto; font-size: 85%; color: #444; } +#security-passhead { font-weight: bold; position: absolute; top: 90px; left: 15px; + width: auto; height: auto; } +#security-passbody { position: absolute; left: 75px; top: 90px; } +#security-passwordedit { height: 15px; border: 1px solid #bbb; + position: absolute; top: 0; left: 15px; width: 120px; } +#security-password a { text-decoration: none; display: block; + width: auto; height: auto; } +#password-savelink, #password-cancellink {position: absolute; top: 0; } +#security-password a:hover { text-decoration: underline; } +#password-savelink { left: 144px; color: #06c; } +#password-cancellink { left: 180px; color: #666; } +#password-nonedit { left: 15px; position: absolute; + width: 220px; top: 0; } +#password-setlink { color: #06c; } +#password-clearlink { color: #06c; } +#password-display { height: 15px; width: auto; } +#password-inedit { display: none; } +#password-display, #password-setlink, #password-clearlink { + float: left; margin-right: 10px; +} +#password-display { font-size: 18px; } +#security-password .nopassword #password-display { font-size: 100%; } +#security-password .nopassword #password-clearlink { display: none; } +#security-password .nopassword #password-setlink { left: 60px; } + +#security-access { position: absolute; left: 15px; width: 200px; } +#security-accesshead { font-weight: bold; position: absolute; top: 10px; + left: 0; width: auto; height: auto; } +#security-access input, #security-access label { position: absolute; } +#security-access input { left: 10px; } +#security-access label { left: 30px; width: 250px; } +#access-private, #access-private-label { top: 35px; } +#access-public, #access-public-label { top: 60px; } +#security-access label { color: #999; } +#security-access label strong { font-weight: normal; padding-right: 10px; + color: #444; } + +#mainmodals { z-index: 600; /* higher than the modals themselves + so that modals are on top in IE */ } + +.modalfield { font-size: 1.2em; padding: 1px; border: 1px solid #bbb; + position: absolute;} +#mainmodals .editempty { color: #aaa; } + +<% feedbackbox = {width:400, height:270}; %> +#feedbackbox { + position: absolute; display: none; + width: <%=feedbackbox.width%>px; height: <%=feedbackbox.height%>px; + left: 100px/*set in code*/; bottom: 50px; + z-index: 501; zoom: 1; +} +#feedbackbox-tl, #feedbackbox-tr, #feedbackbox-bl, #feedbackbox-br, +#feedbackbox-hide, #feedbackbox-send, #feedbackbox-back { + position: absolute; display: block; + background-repeat: no-repeat; + background-image: url(/static/img/jun09/pad/feedbackbox2.gif); +} +#feedbackbox-tl { width: <%=feedbackbox.width-8%>px; + height: <%=feedbackbox.height-8%>px; left: 0; top: 0; + background-position: left top; } +#feedbackbox-tr { width: 8px; height: <%=feedbackbox.height-8%>px; + right: 0; top: 0; background-position: right top; } +#feedbackbox-bl { width: <%=feedbackbox.width-8%>px; + height: 8px; left: 0; bottom: 0; + background-position: left bottom; } +#feedbackbox-br { width: 8px; height: 8px; bottom: 0; right: 0; + background-position: right bottom; } +#feedbackbox-hide { width: 22px; height: 22px; right: 9px; top: 7px; + background-position: -569px -6px; +} +#feedbackbox-back { width: <%=feedbackbox.width-16%>px; + height: <%=feedbackbox.height-16%>px; left: 8px; top: 8px; + background-position: -8px -8px; + background-color: white; } +#feedbackbox-contents { width: <%=feedbackbox.width-16%>px; + height: <%=feedbackbox.height-16%>px; left: 8px; top: 8px; + position: absolute; font-size: 1.4em; color: #444; } +#feedbackbox-contentsinner { padding: 10px; } +#feedbackbox-send { width: 50px; height: 22px; right: 15px; bottom: 15px; + background-position: -535px -363px; +} +#feedbackbox-email { left: 90px; top: 48px; width: 356px; height: auto; } +#feedbackbox-message { left: 90px; top: 84px; width: 358px; height: 100px; } +#feedbackbox-response { position: absolute; bottom: 15px; left: 15px; + width: 390px; height: auto; font-size: 1.2em; display: none; } +#feedbackbox .goodresponse { font-weight: bold; color: green; } +#feedbackbox .badresponse { font-weight: bold; color: red; } +#feedbackbox p { margin-bottom: 1em; } +#feedbackbox ul { margin: 1em 0 1em 2em } +#feedbackbox li { padding: 0.3em 0; } +#feedbackbox li a { display: block; font-weight: bold; } +#feedbackbox li a:hover { background: #ffe; } +#feedbackbox a, #feedbackbox li a:visited { color: #47b; } +#feedbackbox tt { font-size: 110%; } + +<% var shareboxfull = {width:485, height:326}; %> +#sharebox { + position: absolute; + width: 485px; + left: 300px/*set in code*/; top: 100px; display: none; + z-index: 501; zoom: 1; + overflow: hidden; + background: white; border: 1px solid #999; +} +#sharebox { height: 160px/*set in code*/; } +.nonprouser #sharebox { height: 110px/*set in code*/; } +#sharebox-inner { width: 100%; } +#sharebox-forms { position: absolute; top: 50px; width: 100%; } +#sharebox-hide, #sharebox-send { + position: absolute; background-repeat: no-repeat; + background-image: url(/static/img/jun09/pad/sharebox4.gif); +} +#sharebox-hide, #sharebox-send { display: block; } +#sharebox-hide { width: 22px; height: 22px; right: 9px; top: 7px; + background-position: <%= -(shareboxfull.width-31) %>px -6px; +} +#sharebox-send { width: 87px; height: 22px; right: 15px; top: <%= shareboxfull.height-22-15 %>px; + background-position: <%= -(shareboxfull.width-87-15) %>px <%= -(shareboxfull.height-22-15) %>px; +} +#sharebox-url { position: absolute; left: 20px; top: 42px; width: 440px; height: 18px; + text-align: left; font-size: 1.3em; line-height: 18px; padding: 2px; } + +#sharebox-to { left: 90px; top: 117px; height: auto; width: 378px; background: #ffe; } +#sharebox-subject { left: 90px; top: 150px; height: auto; width: 378px; font-weight: bold; } +#sharebox-message { left: 90px; top: 182px; width: 380px; height: 90px; } +#sharebox-response { position: absolute; bottom: 15px; left: 15px; + width: 350px; height: auto; font-size: 1.2em; display: none; } +#sharebox .goodresponse { font-weight: bold; color: green; } +#sharebox .badresponse { font-weight: bold; color: red; } +#sharebox-dislink { position: absolute; left: 12px; top: 78px; + height: 22px; width: 220px; cursor: pointer; + background-image: url(/static/img/jun09/pad/sharedistri.gif); + background-repeat: no-repeat; + background-position: 0 5px; +} +.sharebox-open #sharebox-dislink { background-position: 0 -28px; } +#sharebox-shownwhenexpanded { display: none; } +.sharebox-open #sharebox-shownwhenexpanded { display: block; } + +#sharebox-pastelink { font-size: 155%; font-weight: bold; + top: 13px; left: 17px; position: absolute; color: #444; } +#sharebox-orsend { font-size: 145%; font-weight: bold; + top: 80px; left: 31px; position: absolute; color: #444; } +#sharebox-fieldname-to, #sharebox-fieldname-subject, #sharebox-fieldname-message { + position: absolute; font-weight: bold; font-size: 125%; + left: 15px; color: #222; +} +#sharebox-fieldname-to { top: 119px; } +#sharebox-fieldname-subject { top: 152px; } +#sharebox-fieldname-message { top: 183px; } + +#sharebox-stripe { position: absolute; left: 10px; + width: 436px; top: 8px; height: 45px; line-height: 1.2; } +#sharebox-stripe div { padding: 5px; font-size: 130%; } +#sharebox-stripe strong { font-weight: bold; } +.sharebox-stripe-public { background: #cfc; } +.sharebox-stripe-private { background: #fec; } +.sharebox-stripe-public .private { display: none; } +.sharebox-stripe-private .public { display: none; } +#sharebox-stripe a { color: #06c; } + +.nonprouser #sharebox-stripe { display: none; } +.nonprouser #sharebox-forms { top: 0; } + +#viewbarcontents { display: none; } +#viewzoomtitle { + position: absolute; left: 10px; top: 4px; height: 20px; line-height: 20px; + width: auto; +} +#viewzoommenu { + position: absolute; top: 3px; left: 50px; + width: 65px; +} +#bottomarea { height: 28px; overflow: hidden; position: relative; + font-size: 1.2em; color: #444; } +#widthprefcheck { position: absolute; + background-image: url(/static/img/jun09/pad/layoutbuttons.gif); + background-repeat: no-repeat; cursor: pointer; + width: 86px; height: 20px; top: 4px; right: 2px; } +.widthprefunchecked { background-position: -1px -1px; } +.widthprefchecked { background-position: -1px -23px; } +#sidebarcheck { position: absolute; + background-image: url(/static/img/jun09/pad/layoutbuttons.gif); + background-repeat: no-repeat; cursor: pointer; + width: 86px; height: 20px; top: 4px; right: 90px; } +.sidebarunchecked { background-position: -1px -45px; } +.sidebarchecked { background-position: -1px -67px; } +#feedbackbutton { display: block; position: absolute; width: 68px; + height: 0; padding-top: 17px; overflow: hidden; + background: url(/static/img/jun09/pad/bottomareagfx.gif); + top: 5px; right: 220px; +} + +#modaloverlay { + z-index: 500; display: none; + background-image: url(/static/img/jun09/pad/overlay2.png); + background-repeat: repeat-both; + width: 100%; position: absolute; + height: 400px; left: 0; top: 0; +} + +* html #modaloverlay { /* for IE 6+ */ + opacity: 1; /* in case this is looked at */ + background-image: none; + background-repeat: no-repeat; + /* scale the image */ + filter: progid:DXImageTransform.Microsoft.AlphaImageLoader(src="/static/img/jun09/pad/overlay2.png", sizingMethod="scale"); +} diff --git a/trunk/etherpad/src/static/css/pne-manual.css b/trunk/etherpad/src/static/css/pne-manual.css new file mode 100644 index 0000000..19f1ba0 --- /dev/null +++ b/trunk/etherpad/src/static/css/pne-manual.css @@ -0,0 +1,143 @@ +/* global */ + +div.pne-manpage { + font-size: 1.1em; +} + +.pne-manual-topnav { + border-bottom: 1px solid #ccc; + margin-bottom: 1em; + padding-bottom: 4px; +} + +div.pne-manpage h2 { + color: #111; + border-bottom: 1px solid #111; +} + +div.pne-manpage ul,ol { + padding-left: 2em; +} +div.pne-manpage li { + margin-top: .4em; +} +div.pne-manpage ol li { + list-style: decimal; + margin-top: 1em; +} + + +div.pne-manpage tt { + font-family: monospace; + font-size: 1.1em; + color: #040; + font-style: italic; +} + +div.pne-manpage div.code { + font-family: monospace; + font-size: 1.0em; + padding: 0 1em; + border: 1px solid #ccc; + background: #eee; + margin: 0; +} + +div.pne-manpage div.code span.prompt { + color: #609; +} + +div.pne-manpage div.code tt { + font-style: normal; + font-size: 1.0em; + color: #00f; +} + +div.pne-manpage div.code p { + line-height: 125%; + margin: 1em 0; + padding: 0; +} + +/* main */ + +div#pne-main h2 { + font-size: 1.4em; + color: black; + font-weight: bold; + border: 0; + margin: 0; + padding: 0; +} +div#pne-main h3 { + font-size: 1.1em; + color: #555; + font-style: italic; +} +div#pne-main h4 { + color: #888; + margin-top: 2em; + font-weight: bold; +} +div#pne-main ul { + padding-left: 2em; +} +div#pne-main ul li { + list-style: square; +} +div#pne-main p#version-notice { + font-size: 88%; + color: #333; + margin-top: 2em; + border-top: 1px solid #ccc; +} + +/* configuration-guide */ + +table#opts { + width: 100%; + border-top: 1px solid #ccc; + border-left: 1px solid #ccc; + border-right: 0; + border-bottom: 0; + margin: 2em 0 1em 0; +} +table#opts td, table#opts th { + padding: 4px 0; + border-right: 1px solid #ccc; + border-bottom: 1px solid #ccc; +} +table#opts td { + font-family: monospace; +} +table#opts td.desc { + font-family: Verdana, sans-serif; +} +table#opts th { + text-align: left; + font-weight: bold; +} +table#opts td.rowhead { + padding-top: 1em; + font-style: italic; + color: #222; + border-bottom: 1px solid #222; +} + +/* changelog */ + +div#pne-changelog h2 { + margin-top: 2em; +} + +div#pne-changelog h3 { + font-weight: bold; + padding-left: 1em; + margin: 1em 0; +} + +div#pne-changelog ul { + padding-left: 3em; +} + + diff --git a/trunk/etherpad/src/static/css/pricing.css b/trunk/etherpad/src/static/css/pricing.css new file mode 100644 index 0000000..0b7c9d5 --- /dev/null +++ b/trunk/etherpad/src/static/css/pricing.css @@ -0,0 +1,153 @@ +/*----------------------------------------------------------------*/ +/* pricing */ +/*----------------------------------------------------------------*/ + +div.pricingpage { +} + +.pricingpage form#pricingcontact { + display: block; + margin: 1em 0; + background: #eee; + border: 1px solid #ccc; + padding: 1em; +} +.pricingpage form#pricingcontact p { margin: .75em 0; font-weight: bold; } +.pricingpage form#pricingcontact ul li { list-style: none; margin: 0;} + +.pricingpage .eepnet-inquiry label { + display: block; + float: left; + width: 140px; + text-align: right; + font-weight: normal; + color: #444; +} +.pricingpage .eepnet-inquiry input.ti, +.pricingpage .eepnet-inquiry select { + width: 240px; + margin-left: 12px; +} +.pricingpage .eepnet-inquiry button { + width: 100px; + margin-left: 160px; +} +.pricingpage div.inquiryhead { + font-weight: bold; + color: #000; + margin-bottom: 1em; + border-bottom: 2px solid #aaa; +} + +.pricingpage div#errorbox, .pricingpage div#confirmbox { + color: #222; + font-weight: bold; + padding: 1em .5em; +} +.pricingpage div#errorbox { + background: #fee; + border: 1px solid #f66; +} +.pricingpage div#confirmbox { + background: #efe; + border: 1px solid #ccc; +} + +a.pricingbox { + display: block; + height: 280px; + border: 1px solid #777; + background: #fcfcfc; + cursor: pointer; + text-align: center; + text-decoration: none; +} + +a.pricingbox span { + display: block; +} + +a.pricingbox span#buylink { + display: inline; + color: #004ca8; +} + +a.pricingbox span#buylink:hover { + text-decoration: underline; +} + +a.pricingbox:hover { + background: #e2f2ff; + border: 1px solid #000; + text-decoration: none; +} + +a.pricingbox img { + margin: 10px 0; + border: 0; +} + +a.pricingbox span.pricingtitle { + display: block; + margin-top: 5px; + margin-left: 10px; + font-size: 1.2em; + color: #119; + text-decoration: underline; +} + +a.pricingbox span.pricingdesc { + display: block; + color: #555; + margin: 10px; + height: 4.25em; +} + +a.pricingbox span.pricingcost { + top: 10px; + display: block; + color: #000; + margin: 10px; + font-weight: bold; +} + +a.pricingbox span.pricingcost p { + font-weight: normal; +} + +#freetrialwrap a.freetrialbox { + padding-top: 4px; + display: block; + border: 1px solid #ccc; + background: #eee; + cursor: pointer; + color: #000; + text-decoration: underline; +} +#freetrialwrap a.freetrialbox:hover { + background: #def; +} +#freetrialwrap a.freetrialbox span.freetrialtext { + margin-top: 7px; + float: left; +} +a.freetrialbox img { + border: 0; + float: left; + margin: 5px 10px; +} + +a.pro-signup-button { + display: block + border: 0; + cursor: pointer; + color: #fff; + font-weight: bold; + overflow: visible; + padding: 0; + background: #70a4ec; + border: 1px solid #3773c6; + padding: 4px 6px; + margin-top: 4px; +} + diff --git a/trunk/etherpad/src/static/css/pro-signup.css b/trunk/etherpad/src/static/css/pro-signup.css new file mode 100644 index 0000000..b58d86d --- /dev/null +++ b/trunk/etherpad/src/static/css/pro-signup.css @@ -0,0 +1,69 @@ +.pro-signup { +} + +.pro-signup #about { + width: 400px; + font-size: 86%; + color: #333; +} + +.pro-signup h1 { + border: 0; +} + +.pro-signup h3 { + font-size: 1.2em; + font-weight: bold; + margin: 0 0 .75em 0; + color: #888; +} + +form#pro-act-form { +} + +div.inputdiv { + width: 400px; + float: left; + background: #efe; + padding: .75em; + border-right: 1px solid #999; +} + +div.inputdiv p { + margin: .2em 0 .6em 0; +} + +div.inputhelp { + width: 300px; + font-size: 86%; + color: #555; + float: left; + padding-left: 1em; + padding-top: .5em; +} + +form input { + border: 1px solid #377ec6; +} + +form button { + border: 0; + cursor: pointer; + color: #fff; + font-weight: bold; + overflow: visible; + padding: 0; + background: #70a4ec; + border: 1px solid #3773c6; + padding: 4px 6px; + margin-top: 4px; +} + +div.err { + margin: 1em 0; + padding: 1em; + font-weight: bold; + border: 1px solid #500; + background: #fdd; +} + diff --git a/trunk/etherpad/src/static/css/pro/account.css b/trunk/etherpad/src/static/css/pro/account.css new file mode 100644 index 0000000..212a847 --- /dev/null +++ b/trunk/etherpad/src/static/css/pro/account.css @@ -0,0 +1,254 @@ +.account-container { + width: 434px; + margin: 0 auto; +} + +#account-error { + margin: 1em 0; + padding: 1em; + background: #fee; + border: 1px solid #f66; + font-weight: bold; +} + +#account-message { + margin: 1em 0; + padding: 1em; + background: #efe; + border: 1px solid #ccc; + font-weight: bold; +} + +#signin-notice { + margin: 1em 0; + padding: 1em; + background: #fff6cc; + border: 1px solid #ccc; +} + +/*---- blue box (general) ----*/ +/* TODO: move to different file, bluebox.css? */ + +div.bb { + background: #f7f7f7; +} + +div.bb div.bb-top { + position: relative; + width: 100%; + height: 30px; + background: url(/static/img/pro/box/blue-boxtop.gif) repeat-x 0 -30px; +} + +div.bb div.bb-topleft { + position: absolute; + top: 0; + left: 0; + height: 30px; + width: 9px; + background: url(/static/img/pro/box/blue-boxtop.gif) no-repeat 0 0; +} + +div.bb div.bb-topright { + position: absolute; + top: 0; + right: 0; + height: 30px; + width: 9px; + background: url(/static/img/pro/box/blue-boxtop.gif) no-repeat -9px 0; +} + +div.bb div.bb-title { + color: #fff; + font-weight: bold; + line-height: 30px; + padding-left: 10px; +} + +div.bb div.bb-in { + border-left: 1px solid #ccc; + border-right: 1px solid #ccc; + border-bottom: 1px solid #ccc; +} + +button.bluebutton { + border: 0; + cursor: pointer; + color: #fff; + font-weight: bold; + overflow: visible; + padding: 0; + background: #70a4ec; + border: 1px solid #3773c6; + padding: 4px 6px; +} + +button.bluebutton120 { + background: url(/static/img/pro/buttons/bluebutton120.gif) no-repeat; + width: 120px; + height: 26px; + padding: 0; + border: 0; +} + + +/*---- sign-in box ----*/ + +div.bb-signin div.bb-in { + padding: 10px 12px 20px 12px; +} + +div.bb-signin label#email-label, +div.bb-signin label#password-label { + display: block; + float: left; + width: 92px; + margin-top: 10px; + font-size: 1.1em; + color: #333; + padding-top: 5px; +} + +div.bb-signin input.textin, +div.bb-signin input.passin { + border: 1px solid #c2c2c2; + background: #ffffff; + margin-top: 10px; + width: 300px; + font-size: 1.1em; + float: right; +} + +div.bb-signin input#rememberMe, +div.bb-signin label#rememberMe-label { + float: left; +} +div.bb-signin input#rememberMe { + margin-top: 32px; +} +div.bb-signin label#rememberMe-label { + margin-left: 10px; + margin-top: 32px; + color: #555; + font-size: .9em; + display: block; +} + +div.bb-signin button.bluebutton { + float: right; + margin-top: 24px; +} + + +div.account-container div#bottom-text { + padding-top: 20px; + padding-left: 4px; + font-size: .9em; +} +div.account-container div#bottom-text a { + text-decoration: none; +} + +#guest-signin-choice { + display: block; + border: 1px solid green; + background: #efe; + padding: 1em; + margin: 1em 0; +} + +#account-signin-choice { + display: block; + border: 1px solid blue; + background: #eef; + padding: 1em; + margin: 1em 0; +} + +div#guest-knock-box { + width: 500px; + margin: 0 auto; + border: 1px solid green; + background: #efe; + font-weight: bold; + padding: 1em; + font-size: 1.5em; +} + +div#guest-knock-denied { + border: 1px solid red; + background: #fee; + font-weight: bold; + font-size: 1.5em; + padding: 1em; + margin: 0 auto; + width: 500px; + display: none; +} + +/*---- recover lost password ----*/ + +div.bb-forgotpass div.bb-in { + padding: 10px 12px 12px 12px; +} + +div.bb-forgotpass div#instructions { + font-size: .8em; + color: #222; +} + +div.bb-forgotpass label { + float: left; + width: 92px; + margin-top: 10px; + font-size: 1.1em; + color: #333; + padding-top: 5px; +} + +div.bb-forgotpass input.textin { + border: 1px solid #c2c2c2; + background: #fff; + margin-top: 14px; + width: 300px; + float: right; +} + +div.bb-forgotpass button { + float: right; + margin-top: 16px; +} + + +/*---- my account ----*/ +/* TODO: re-style this and move to different file */ + +div.my-account { + width: 600px; +} + +div.my-account h2 { + font-size: 1.2em; + border-bottom: 1px solid #444; + color: #444; + margin: 1em 0; +} + +div.my-account table { + width: 500px; +} + +div.my-account table .ti input { + width: 100%; +} + +div.my-account table th { + width: 160px; +} + +div.my-account table th, +div.my-account table td { + padding: 4px 8px; +} + + diff --git a/trunk/etherpad/src/static/css/pro/framedpage-pro.css b/trunk/etherpad/src/static/css/pro/framedpage-pro.css new file mode 100644 index 0000000..cffa58b --- /dev/null +++ b/trunk/etherpad/src/static/css/pro/framedpage-pro.css @@ -0,0 +1,125 @@ +/*--- farmed page styles ---*/ + +/*------ + Global Container +------*/ + +body#framedpagebody { + background: #fff; +} + +#container { + font-family: Arial, Helvetica, Calibri, sans-serif; + width: 920px; margin: 0 auto; +} + +/*------ + Layout +------*/ + +/* framed page general */ +div.fpcontent { + width: 888px; + margin: 0 auto; + font-size: 1.3em; + background-color: #fff; + padding-top: 1em; +} + +div.fpcontent p { + margin: 1em 0; + line-height: 150%; +} +div.fpcontent ul { + list-style: disc; + padding-left: 2em; +} +div.fpcontent ul li { + margin: 1em 0; +} + +/* top header */ + +body.pro-withtopbar { + background: url(/static/img/pro/header/pro-header-plustopnav-back.gif) repeat-x top !important; +} + +#pro-topbar { + height: 48px; +} + +#pro-topbar-inner { + width: 888px; + margin: 0 auto; + height: 48px; + line-height: 48px; + background: url(/static/img/pro/header/pro-header-logo.png) no-repeat top center; +} + +#pro-topbar div#org-name a { + font-size: 1.4em; + color: #fff; + vertical-align: center; +} + +#pro-topbar #accountnav { + float: right; + vertical-align: center; + color: #fff; +} + +#pro-topbar #accountnav a { + color: #cde7ff; + text-decoration: underline; +} + + +/* navigation */ + +#pro-topnav { + background: url(/static/img/pro/topnav/pro-topnav-back.gif) repeat-x top; + height: 36px; +} + +#pro-topnav-inner { + margin: 0 auto; + height: 36px; + width: 888px; +} + +#pro-topnav ul { + float: left; +} +#pro-topnav ul li { + display: block; + height: 36px; + float: left; +} +#pro-topnav ul li a { + display: block; + line-height: 36px; + margin: 0 20px; +} +#pro-topnav ul li.topnav_home a { + margin-left: 0; +} +#pro-topnav ul li a:hover { } +#pro-topnav ul li.selected a { + color: #000; + background: url(/static/img/pro/topnav/pro-topnav-notch.gif) no-repeat center 28px; +} + +#shuttingdown { position: relative; zoom: 1; border: 1px solid #992; + background: #ffc; padding: 0.6em; font-size: 1.2em; margin-top: 6px; } + + +/*--- framed page styles ---*/ + +div.global-pro-notice { + margin: .5em 1em; + border: 1px solid #f84; + background: #ffc; + font-weight: bold; + padding: 1em; +} + diff --git a/trunk/etherpad/src/static/css/pro/padlist.css b/trunk/etherpad/src/static/css/pro/padlist.css new file mode 100644 index 0000000..13d3171 --- /dev/null +++ b/trunk/etherpad/src/static/css/pro/padlist.css @@ -0,0 +1,115 @@ + +/*---- nav ----*/ + +#padlist-nav { + border-top: 1px solid #ddd; + border-bottom: 1px solid #ddd; +} + +#padlist-nav ul { + margin: 0; + padding: 0; + float: left; +} + +#padlist-nav form { + float: right; + padding-top: 2px; +} + +#padlist-nav ul li { + list-style: none; + float: left; + padding: 0; + margin: 0; +} + +#padlist-nav ul li a { + display: block; + padding: 8px 12px; + font-size: .8em; +} + +#padlist-nav ul li a.selected { + color: black; +} + +#padlist-nav ul li a#nav-all-pads { + padding-left: 0; +} + +/*---- showing sentence ----*/ + +#showing-desc { + margin-top: 12px; + color: #464; + font-size: .8em; + font-style: italic; +} + +/*---- table ----*/ + +#padtable { + margin-top: 1em; + border-top: 1px solid #ccc; + border-left: 1px solid #ccc; +} + +#padtable th { + font-weight: bold; +} + +#padtable th, +#padtable td { + border-right: 1px solid #ccc; + border-bottom: 1px solid #ccc; + padding: 4px 8px; +} + +#padtable td.actions { + padding: 0; +} + +#padtable tr:hover { + background: #ffffaa; +} +#padtable tr.toprow:hover { + background: inherit; +} + +#padtable div.gear-drop { + width: 36px; + height: 20px; + background: url(/static/img/pro/padlist/gear-drop.gif) no-repeat center 4px; + cursor: pointer; + padding: 4px 8px; +} + +#padtable tr.selected { +/* background: #6670ff; */ + background: #ffff88; +} +#padtable tr.selected td { + border-top: 1px solid black; + border-bottom: 1px solid black; + border-right: 0; +} +#padtable tr.selected td.first { + border-left: 1px solid black; +} +#padtable tr.selected td.last { + border-right: 1px solid black; +} +#padtable tr.selected td a { + color: #000; +} + +div.padlist-notice { + border: 1px solid #ccc; + font-weight: bold; + background: #fff6cc; + padding: 1em; + margin-bottom: 1em; + font-size: 82.5%; +} + diff --git a/trunk/etherpad/src/static/css/pro/payment-required.css b/trunk/etherpad/src/static/css/pro/payment-required.css new file mode 100644 index 0000000..44d55b2 --- /dev/null +++ b/trunk/etherpad/src/static/css/pro/payment-required.css @@ -0,0 +1,39 @@ + +#outside{ + padding: 0 0 0 266px; + background: url(/static/img/pro/billing/cards-button.gif) 50px 25px no-repeat; +} + +#inside { + margin: 0; + padding: 1em; + border-left: 1px solid #ccc; + background: #fff; +} + +h1 { + font-weight: bold; + font-size: 1.33em; + border-bottom: 1px solid #ccc; +} + +#message { + border: 1px solid #b97; + background: #ffe; + padding: 1em; + margin: 1em 0; +} + +a.manage-billing-button { + display: block + border: 0; + cursor: pointer; + color: #fff; + font-weight: bold; + overflow: visible; + background: #70a4ec; + border: 1px solid #3773c6; + padding: 8px 12px; + margin-top: 4px; +} + diff --git a/trunk/etherpad/src/static/css/pro/pro-admin.css b/trunk/etherpad/src/static/css/pro/pro-admin.css new file mode 100644 index 0000000..e7462c9 --- /dev/null +++ b/trunk/etherpad/src/static/css/pro/pro-admin.css @@ -0,0 +1,343 @@ +/*----------------------------------------------------------------*/ +/* admin leftnav */ +/*----------------------------------------------------------------*/ + +#admin-layout-table { + width: 100%; +} + +#admin-layout-table td { +} + +#admin-leftnav { + font-size: .81em; + border: 1px solid #ccc; + white-space: nowrap; + background: #eee; + padding: 0; +} + +#admin-leftnav .leftnav-title { + padding: .75em .25em .25em .25em; + border-bottom: 1px solid #ccc; +} +#admin-leftnav ul { + padding: 0; + list-style: none; +} + +#admin-leftnav ul ul { + list-style: disc; +} + +#admin-leftnav li { + display: block; + width: 100%; + margin: 0; +} + +#admin-leftnav li a { + display: block; + margin: 0; + padding: .5em; +} + +#admin-leftnav li a:hover { + text-decoration: none; + background: #ffc; +} + +#admin-leftnav li.selected a { + color: #000; + font-weight: bold; + background: #fff; +} + +/*----------------------------------------------------------------*/ +/* admin content area */ +/*----------------------------------------------------------------*/ + +#admin-right { + padding-left: 1em; +} + +#admin-right h3 { + font-weight: bold; + font-size: 1.1em; + color: #666; + border-bottom: 1px solid #666; + margin: 1.25em 0; +} + +#admin-right h3.top { + margin-top: 0; +} + +/*----------------------------------------------------------------*/ +/* server dashboard */ +/*----------------------------------------------------------------*/ + +#responsecodes-table { + border 1px solid #ccc; +} +#responsecodes-table td, +#responsecodes-table th { + padding: .4em; +} +#responsecodes-table th { + font-weight: bold; + border-bottom: 1px solid #ccc; + padding-right: 2em; +} + +/*----------------------------------------------------------------*/ +/* license manager */ +/*----------------------------------------------------------------*/ + +div.lm-error-msg { + border: 1px solid #f99; + font-weight: bold; + background: #fdd; + padding: 0 1em; + margin-bottom: 1em; +} + +div.lm-notice-msg { + border: 1px solid #ccc; + font-weight: bold; + background: #fff6cc; + padding: 0 1em; + margin-bottom: 1em; +} + +#lm-status { + border: 1px solid #ccc; + padding: 1em; + background: #dfd; +} + +#lm-status table td { + padding: .5em 1.5em .5em 0; + border-bottom: 1px solid #ccc; + white-space: nowrap; +} + +#lm-edit-button-wrap { margin: 1em 0; } + +#lm-edit { + background: #eef; + border: 1px solid #ccc; + padding: 0 1em 1em 1em; +} +#lm-edit p { + margin: 1em 0 0 0; +} +#lm-edit-submit-wrap { margin: 1em 0; } + +#lm h3 { +/* margin-left: 1em; */ +} + +/*----------------------------------------------------------------*/ +/* accountmanager */ +/*----------------------------------------------------------------*/ + +.manage-accounts { + font-size: .76em; +} + +.manage-accounts #message { + border: 1px solid #ccc; + background: #efe; + color: #666; + font-weight: bold; + padding: 1em; +} + +.manage-accounts #warning { + border: 1px solid #ccc; + background: #ffd; + color: #333; + font-weight: bold; + padding: 1em; + margin-top: 1em; +} + +.manage-accounts form#new-account-button { + margin: 1em 0; +} + +table#accountlist { + border: 1px solid #ccc; + border-bottom: 0; +} + +table#accountlist tr:hover { + background: #ffc; +} + +table#accountlist th, +table#accountlist td { + white-space: nowrap; + padding: .5em 1em .5em .5em; + border-bottom: 1px solid #ccc; +} + +table#accountlist th { + font-weight: bold; + background-color: #eef; +} + +.manage-accounts p.free-notice { + font-style: italic; + color: #162; +} + +.manage-accounts p.account-tally { + font-style: italic; +} + +/* new account form */ + +.new-account-form { + border: 1px solid #ccc; + background: #eef; + padding: 0; + margin: 0; +} + +.new-account-form .forminner { + padding: 1em; +} + +.new-account-form div.formfield { + margin-top: .5em; + padding: 0 1em; +} + +.new-account-form div.formfield label { display: block; margin-top: 1em; } +.new-account-form div.formfield input.checkboxinput { float: left; width: 20px; } +.new-account-form div.formfield input.textinput { display: block; width: 240px; } +.new-account-form div.formfield input.temppassinput { display: block; width: 240px; } +.new-account-form div.formfield label.checkboxlabel { float: left; margin-top: .333em; padding-left: .25em; } +.newaccount .buttons-wrap { margin-left: 2em; } + +.newaccount #bottom-note { + color: #555; + margin-left: 2em; + width: 50%; +} + +#error-message { + border: 1px solid red; + background: #fee; + padding: 1em; + font-weight: bold; + margin-bottom: 1em; +} + +/* manage account page */ + +table#manage-account { + border-left: 1px solid #ccc; + border-top: 1px solid #ccc; + background: #eef; +} +table#manage-account td, +table#manage-account th { + border-right: 1px solid #ccc; + border-bottom: 1px solid #ccc; + padding: 4px 8px; +} +table#manage-account th { + text-align: right; +} + +#delete-account-page div.confirm { + font-weight: bold; +} + +#delete-account-page div.account-info { + border: 1px solid #555; + background: #fcc; + padding: 1em; + margin: 1em 0; + font-family: monospace; +} + +#delete-account-page div.note { + margin-top: 1em; + margin-right: 222px; + font-size: .9em; + color: #555; +} + + +/*----------------------------------------------------------------*/ +/* PNE server config */ +/*----------------------------------------------------------------*/ + +table#pne-config { + font-family: monospace; + font-size: 12px; + border-top: 1px solid #ccc; + border-left: 1px solid #ccc; + white-space: nowrap; + background: #fefefe; +} + +table#pne-config th { + border-bottom: 2px solid #666; + font-weight: bold; +} +table#pne-config td { + padding: 2px; + border-bottom: 1px solid #ccc; + border-right: 1px solid #ccc; +} + +table#pne-config td.key { + color: #009; + padding-right: 4px; +} +table#pne-config td.val { color: #420; } + +/*----------------------------------------------------------------*/ +/* Pro config */ +/*----------------------------------------------------------------*/ + +div#pro-config-message { + border: 1px solid #ccc; + padding: 1em; + font-weight: bold; + margin: 1em 0; + background: #cfc; +} + +table#t-pro-config { + display: block; + border-left: 1px solid #aaa; + border-right: 1px solid #aaa; + border-bottom: 1px solid #aaa; +} + +table#t-pro-config th, +table#t-pro-config td { + border-top: 1px solid #aaa; + padding: 1em; + text-align: top; + vertical-align: top; +} + +table#t-pro-config td textarea { + width: 100%; + height: 260px; +} + +table#t-pro-config th { + text-align: right; + color: #963; + font-weight: bold; +} + + diff --git a/trunk/etherpad/src/static/css/pro/pro-home.css b/trunk/etherpad/src/static/css/pro/pro-home.css new file mode 100644 index 0000000..03f163a --- /dev/null +++ b/trunk/etherpad/src/static/css/pro/pro-home.css @@ -0,0 +1,65 @@ + +#welcome-msg { + font-size: 1.2em; + color: #333; +} + +#homeright { + width: 320px; + float: right; +} + +#homeleft { + width: 548px; + float: left; +} + +#homeleft-title { + font-weight: bold; + font-size: 1.0em; + margin-top: 1em; +} + +.news-time-sep { + margin-top: 2em; +} + +.news-time-sep .date { + float: left; + background: #fff; + padding-right: 1em; + color: #666; + font-size: .9em; +} + +.news-time-sep .line { + height: .5em; + border-bottom: 1px solid #ccc; +} + +.news-item { + padding: 0 2em 0 1em; + font-size: .86em; +} + +/*-------------------------------------------------------------------------------- + * recent pads + *--------------------------------------------------------------------------------*/ + +#recent-pads #viewall { + display: block; + float: left; + margin: 0.8em 0; + font-size: 0.8em; +} + +#homeright #padtable { + width: 100%; +} + +#homeright h3 { + font-size: 1.0em; + font-weight: bold; + margin-top: 1em; +} + diff --git a/trunk/etherpad/src/static/css/stats.css b/trunk/etherpad/src/static/css/stats.css new file mode 100644 index 0000000..25dd074 --- /dev/null +++ b/trunk/etherpad/src/static/css/stats.css @@ -0,0 +1,71 @@ +div.statentry { + width: 600px; + border: 1px solid #060; + background: #afa; + margin: 1em; +} + +body { + margin: 0; +} + +div.warning { + background: #ffa; + border: 1px solid #630; +} + +div.error { + background: #faa; + border: 1px solid #600; +} + +.statentry h2 { + font-size: 13pt; + font-family: sans-serif; + background: #0a0; + color: white; + padding: 5px; + margin: 0; + cursor: pointer; +} + +.statentry h2:hover { + text-decoration: underline; +} + +.warning h2 { + background: #ea0; +} + +.error h2 { + background: #a00; +} + +.statentry th { + padding: 3px; + font-weight: normal; +} + +.statentry td { + text-align: left; + padding: 3px; + width: 400px; + font-size: 24px; +} + +.statentry table { + width: 100%; +} + +.statbody { + display: none; +} + +/*div.categorywrapper { + -moz-column-width: 500px; + -moz-column-gap: 20px; + -webkit-column-width: 500px; + -webkit-column-gap: 20px; + column-width: 500px; + column-gap: 20px; +}*/ \ No newline at end of file diff --git a/trunk/etherpad/src/static/css/store/eepnet-checkout.css b/trunk/etherpad/src/static/css/store/eepnet-checkout.css new file mode 100644 index 0000000..20254af --- /dev/null +++ b/trunk/etherpad/src/static/css/store/eepnet-checkout.css @@ -0,0 +1,284 @@ +#shoppingmain dt { + margin: 0.5em; + margin-left: 0.5em; + font-weight: bold; + line-height: 120%; +} + +#shoppingmain dd { + margin: 0.5em; + margin-top: 1em; + margin-bottom: 2em; + line-height: 120%; +} + +#shoppingmain dd:first-letter, +#shoppingmain dt:first-letter { + font-weight: bold; +} + +#shoppingmain table { + background: #eef; + width: 100%; +} + +#shoppingmain table tr {} +#shoppingmain > table td, +#shoppingmain > table th { + padding: 6px 8px; +} + +#shoppingmain { + width: 100%; + border: 1px solid #ccc; +} + +#shoppingmain p { + margin: 1em; +} + +#shoppingmain a { + text-decoration: underline; +} + +#shoppingmain ul, +#shoppingmain ol { + margin-right: 1em; +} + +#shoppingmain h3 { + background: #eee; + padding: 0.5em 1em; + border-bottom: 1px solid #ccc; + font-weight: bold; + font-size: 110%; +} + +#shoppingwrapper { + width: 580px; +} + +.shoppingcart table td.pcell, table th.pcell { + text-align: right; + white-space: nowrap; +} + +#shoppingcart { + border: 1px solid #ccc; + background: white; +} + +.shoppingcart table { + width: 100%; +} + +.shoppingcart table th { + font-weight: bold; + background: #eee; + border-bottom: 1px solid #ccc; +} + +.shoppingcart table td { + padding: 0 3px; +} + +.shoppingcart table th { + padding: 5px; +} + +div.checkoutnav { + padding-top: 10px; + clear: both; + display: block; + text-align: center; +} + +.center, +.center td { + text-align: center; +} + +div.errormsg { + border: 1px solid #caa; + padding: 1em; + margin: 1em 0; +} + +div.errormsg, +table tr.error, +p.error, +div.error { + background: #fdd; +} + +div.innererrormsg { + margin: 1em; + border: 1px solid #aca; + padding: 1em; + background: #dfd; +} + +a#cschelp { + font-size: 7pt; + color: blue; + border-bottom: 1px dashed blue; +} + +table tr.total td { + font-weight: bold; +} + +#shoppingcart { + width: 250px; + float: right; + font-size: 85%; +} + +.shoppingcart span.desc { + display: block; + padding-top: 4px; + padding-left: 10px; + font-style: italic; +} + +table tr.withoutsubtotal td, +table tr.subtotal td { + border-top: 1px solid #ccc; +} + +#backbutton { + float: right; + padding: 5px; +} + +#continuebutton { + float: right; + padding: 5px; +} + +.shoppingcart tr.base td { + padding-top: 5px; +} + +.shoppingcart tr.refer td { + color: green; + font-weight: bold; +} + +.shoppingcart tr.support td { + padding-top: 10px; +} + +.shoppingcart tr.referralbonus td { + padding-top: 10px; +} + +.shoppingcart tr.spacer td { + padding-top: 10px; +} + +.shoppingcart tr.subtotal td { + padding-top: 5px; +} + +.shoppingcart tr.referraldiscount td { + padding-top: 5px; +} + +.shoppingcart tr.total td { + padding-top: 5px; + padding-bottom: 5px; +} + +.shoppingcart td.noitems { + text-align: center; + padding-top: 15px; +} + +.paymentbutton label { + cursor: pointer; +} + +.billingtable td.pcell { + width: 300px; +} + +.billingtable tr.intonly { + display: none; +} + +.billingtable #ccimages img.ccimageselected { + border: 3px solid #0f0; + opacity: 1; +} + +.billingtable #ccimages img { + border: 3px solid #eef; + opacity: 0.5; +} + +input[type="text"].greenborder { + border: 1px solid #0f0; +} + +input[type="text"].redborder { + border: 1px solid #f00; +} + +input[type="text"] { + border: 1px solid black; + padding: 2px; +} + +td.tcell { + width: 200px; +} + +#shoppingmain td { + font-weight: bold; +} + +#shoppingmain input, +#shoppingmain p, +#shoppingmain td, +#shoppingmain li { + font-size: 85%; +} + +h4 { + font-weight: bold; + font-size: 100%; + margin: 10px; + margin-top: 20px; +} + +h4 .editlink { + font-size: 75%; +} + +span.item .editlink { + font-size: 75%; +} + +span.desc .editlink { + font-size: 75%; + font-style: normal; +} + +.paymentbutton { + padding-left: 1.5em; +} + +div.position { + font-size: 80%; + color: #999; + padding-bottom: 10px; +} + +div.position .current { + color: #f93; +} + +span.poslabel { + padding: 0 1em; +} diff --git a/trunk/etherpad/src/static/css/store/ondemand-billing.css b/trunk/etherpad/src/static/css/store/ondemand-billing.css new file mode 100644 index 0000000..7c4afe3 --- /dev/null +++ b/trunk/etherpad/src/static/css/store/ondemand-billing.css @@ -0,0 +1,170 @@ +input[type="text"].greenborder { + border: 1px solid #0f0; +} + +input[type="text"].redborder { + border: 1px solid #f00; +} + +input[type="text"] { + border: 1px solid black; + padding: 2px; +} + +h4 { + font-weight: bold; + margin-bottom: 0.75em; + margin-top: 1em; + margin-left: 15px; +} + +div.billinginfo { + margin-left: 65px; + border-left: 1px solid gray; + border-right: 1px solid gray; + border-top: 1px solid gray; + border-bottom: 1px solid gray; + width: 600px; +} + +.billinginfo table.billingtable { + width: 100%; + margin: 0; + background: #eef; +} + +.billinginfo table.billingtable td, +.billinginfo table.billingtable th { + padding: 5px; +} + +.billinginfo table.billingtable td.pcell, +.billinginfo table.billingtable td.firstcell { + padding-left: 35px; +} + +.billinginfo table.billingtable td.pcell { + width: 200px; +} + +.billinginfo div { + padding-left: 35px; +} + +.billinginfo div#billingselect { + padding-left: 0; +} + +.billinginfo div#billingselect p { + padding: 3px; + padding-left: 35px; +} + +.billingtable #ccimages img.ccimageselected { + border: 3px solid #0f0; + opacity: 1; +} + +.billingtable #ccimages img { + border: 3px solid #eef; + opacity: 0.5; +} + +a#cschelp { + font-size: 7pt; + color: blue; + border-bottom: 1px dashed blue; +} + +div#contbutton { + margin-top: 1em; + margin-right: 45px; + float: right; +} + +div#backbutton { + margin-top: 1em; + float: right; +} + +div.errormsg { + border: 1px solid #caa; + padding: 1em; + margin: 1em 0; +} + +div.errormsg, +table tr.error, +p.error, +div.error { + background: #fdd; +} + +table.billingsummary { + width: 100%; + border-top: 1px solid gray; + border-left: 1px solid gray; +} + +table.billingsummary th, +table.billingsummary td { + padding: 5px; + border-bottom: 1px solid gray; + border-right: 1px solid gray; +} + +table.billingsummary th { + font-weight: bold; +} + +span#editpaymentslink { + text-align: right; + font-size: 80%; + margin-left: 0.5em; +} + +#editpaymentslink a { + text-decoration: underline; +} + + +.paymentbutton label { + cursor: pointer; +} +.paymentbutton { + padding-left: 1.5em; +} + +/* invoice list */ + +.informational { + font-style: italic; +} + +table.invoicelist { + border-left: 1px solid #ccc; + border-top: 1px solid #ccc; + border-right: 1px solid #ccc; + width: 100%; + font-size: 10pt; +} + +table.invoicelist tr:hover { + background: #ffc; +} + +table.invoicelist td, +table.invoicelist th { + border-bottom: 1px solid #ccc; + padding: 5px; +} + +table.invoicelist th { + font-weight: bold; + background: #eef; +} + +.returnlink { + font-size: 10pt; + font-style: italic; +} \ No newline at end of file diff --git a/trunk/etherpad/src/static/css/store/store.css b/trunk/etherpad/src/static/css/store/store.css new file mode 100644 index 0000000..f228698 --- /dev/null +++ b/trunk/etherpad/src/static/css/store/store.css @@ -0,0 +1,90 @@ +div.storepage a.downloadbutton_disabled { + text-decoration: none; + display: block; + padding: .4em; + margin: 1em; + font-size: 1.4em; + width: 270px; + margin-left: auto; + margin-right: auto; + border: 2px solid #ccc; + background: #eee; + color: #888; +} + +div.storepage a.downloadbutton { + text-decoration: none; + display: block; + padding: .4em; + margin: 1em; + font-size: 1.4em; + width: 270px; + margin-left: auto; + margin-right: auto; + border: 2px solid #333; + background: #ccc; +} +div.storepage a.downloadbutton:hover { + background: #ddf; + cursor: pointer; +} + +div.storepage label:hover { + cursor: pointer; +} + +div.storepage div#topmsg { + border: 1px solid #999; + background: #dfd; + font-weight: bold; + padding: 1em; +} + +div.storepage div#errormsg { + border: 1px solid #f00; + background: #fee; + font-weight: bold; + padding: 1em 2em; + magin-top: 1em; + margin-bottom: 1em; +} + +#dlsignup { + border: 1px solid #ccc; +/* background: #ffefdf; */ + background: #efe; + padding: 1em 2em; +} + +#dlsignup, div#errormsg { + display: block; +} + +#dlsignup p { + margin: 0; +} + +#dlsignup p label { + display: block; + margin-top: .7em; + color: #444; +} + +#dlsignup input, +#dlsignup select { + width: 400px; +} + +#dlsignup button { + margin-top: 1em; + width: 200px; + margin-left: 100px; +} + +div#processingmsg { + border: 1px solid #ccc; + background: #efe; + padding: 1em 2em; + font-weight: bold; + font-size: 1.4em; +} diff --git a/trunk/etherpad/src/static/favicon.ico b/trunk/etherpad/src/static/favicon.ico new file mode 100644 index 0000000..a833c3a Binary files /dev/null and b/trunk/etherpad/src/static/favicon.ico differ diff --git a/trunk/etherpad/src/static/img/about/appjet-logo-large.gif b/trunk/etherpad/src/static/img/about/appjet-logo-large.gif new file mode 100644 index 0000000..11351b2 Binary files /dev/null and b/trunk/etherpad/src/static/img/about/appjet-logo-large.gif differ diff --git a/trunk/etherpad/src/static/img/about/appjet-logo-medium.png b/trunk/etherpad/src/static/img/about/appjet-logo-medium.png new file mode 100644 index 0000000..f6297e1 Binary files /dev/null and b/trunk/etherpad/src/static/img/about/appjet-logo-medium.png differ diff --git a/trunk/etherpad/src/static/img/about/investors/mitchkapor.jpg b/trunk/etherpad/src/static/img/about/investors/mitchkapor.jpg new file mode 100644 index 0000000..5a65938 Binary files /dev/null and b/trunk/etherpad/src/static/img/about/investors/mitchkapor.jpg differ diff --git a/trunk/etherpad/src/static/img/about/investors/pb.jpg b/trunk/etherpad/src/static/img/about/investors/pb.jpg new file mode 100644 index 0000000..bd59c5c Binary files /dev/null and b/trunk/etherpad/src/static/img/about/investors/pb.jpg differ diff --git a/trunk/etherpad/src/static/img/about/investors/pg.jpg b/trunk/etherpad/src/static/img/about/investors/pg.jpg new file mode 100644 index 0000000..184155d Binary files /dev/null and b/trunk/etherpad/src/static/img/about/investors/pg.jpg differ diff --git a/trunk/etherpad/src/static/img/about/investors/sanjeev.jpg b/trunk/etherpad/src/static/img/about/investors/sanjeev.jpg new file mode 100644 index 0000000..9073b50 Binary files /dev/null and b/trunk/etherpad/src/static/img/about/investors/sanjeev.jpg differ diff --git a/trunk/etherpad/src/static/img/about/investors/seth.jpg b/trunk/etherpad/src/static/img/about/investors/seth.jpg new file mode 100644 index 0000000..00f2aa9 Binary files /dev/null and b/trunk/etherpad/src/static/img/about/investors/seth.jpg differ diff --git a/trunk/etherpad/src/static/img/about/people/aaron-david-iphones-thumb.jpg b/trunk/etherpad/src/static/img/about/people/aaron-david-iphones-thumb.jpg new file mode 100644 index 0000000..70c17db Binary files /dev/null and b/trunk/etherpad/src/static/img/about/people/aaron-david-iphones-thumb.jpg differ diff --git a/trunk/etherpad/src/static/img/about/people/aaron-david-iphones.jpg b/trunk/etherpad/src/static/img/about/people/aaron-david-iphones.jpg new file mode 100644 index 0000000..70c17db Binary files /dev/null and b/trunk/etherpad/src/static/img/about/people/aaron-david-iphones.jpg differ diff --git a/trunk/etherpad/src/static/img/about/people/aaron-google-air.jpg b/trunk/etherpad/src/static/img/about/people/aaron-google-air.jpg new file mode 100644 index 0000000..5948454 Binary files /dev/null and b/trunk/etherpad/src/static/img/about/people/aaron-google-air.jpg differ diff --git a/trunk/etherpad/src/static/img/about/people/aaron-headshot-thumb.jpg b/trunk/etherpad/src/static/img/about/people/aaron-headshot-thumb.jpg new file mode 100644 index 0000000..b0cffcd Binary files /dev/null and b/trunk/etherpad/src/static/img/about/people/aaron-headshot-thumb.jpg differ diff --git a/trunk/etherpad/src/static/img/about/people/aaron-headshot.jpg b/trunk/etherpad/src/static/img/about/people/aaron-headshot.jpg new file mode 100644 index 0000000..2b88437 Binary files /dev/null and b/trunk/etherpad/src/static/img/about/people/aaron-headshot.jpg differ diff --git a/trunk/etherpad/src/static/img/about/people/aaron-headshot2-thumb.jpg b/trunk/etherpad/src/static/img/about/people/aaron-headshot2-thumb.jpg new file mode 100644 index 0000000..d6c1a97 Binary files /dev/null and b/trunk/etherpad/src/static/img/about/people/aaron-headshot2-thumb.jpg differ diff --git a/trunk/etherpad/src/static/img/about/people/aaron-headshot2.jpg b/trunk/etherpad/src/static/img/about/people/aaron-headshot2.jpg new file mode 100644 index 0000000..e4b2a77 Binary files /dev/null and b/trunk/etherpad/src/static/img/about/people/aaron-headshot2.jpg differ diff --git a/trunk/etherpad/src/static/img/about/people/aaron-headshot3-thumb.jpg b/trunk/etherpad/src/static/img/about/people/aaron-headshot3-thumb.jpg new file mode 100644 index 0000000..cca1b68 Binary files /dev/null and b/trunk/etherpad/src/static/img/about/people/aaron-headshot3-thumb.jpg differ diff --git a/trunk/etherpad/src/static/img/about/people/aaron-headshot3.jpg b/trunk/etherpad/src/static/img/about/people/aaron-headshot3.jpg new file mode 100644 index 0000000..13c433d Binary files /dev/null and b/trunk/etherpad/src/static/img/about/people/aaron-headshot3.jpg differ diff --git a/trunk/etherpad/src/static/img/about/people/daniel-headshot-thumb.jpg b/trunk/etherpad/src/static/img/about/people/daniel-headshot-thumb.jpg new file mode 100644 index 0000000..567316c Binary files /dev/null and b/trunk/etherpad/src/static/img/about/people/daniel-headshot-thumb.jpg differ diff --git a/trunk/etherpad/src/static/img/about/people/david-headshot-thumb.jpg b/trunk/etherpad/src/static/img/about/people/david-headshot-thumb.jpg new file mode 100644 index 0000000..5f9da44 Binary files /dev/null and b/trunk/etherpad/src/static/img/about/people/david-headshot-thumb.jpg differ diff --git a/trunk/etherpad/src/static/img/about/people/david-headshot.jpg b/trunk/etherpad/src/static/img/about/people/david-headshot.jpg new file mode 100644 index 0000000..89ab3ea Binary files /dev/null and b/trunk/etherpad/src/static/img/about/people/david-headshot.jpg differ diff --git a/trunk/etherpad/src/static/img/about/people/davy-headshot.jpg b/trunk/etherpad/src/static/img/about/people/davy-headshot.jpg new file mode 100644 index 0000000..9430186 Binary files /dev/null and b/trunk/etherpad/src/static/img/about/people/davy-headshot.jpg differ diff --git a/trunk/etherpad/src/static/img/about/people/jd-headshot-thumb.jpg b/trunk/etherpad/src/static/img/about/people/jd-headshot-thumb.jpg new file mode 100644 index 0000000..b399a57 Binary files /dev/null and b/trunk/etherpad/src/static/img/about/people/jd-headshot-thumb.jpg differ diff --git a/trunk/etherpad/src/static/img/about/people/jd-headshot.jpg b/trunk/etherpad/src/static/img/about/people/jd-headshot.jpg new file mode 100644 index 0000000..182d534 Binary files /dev/null and b/trunk/etherpad/src/static/img/about/people/jd-headshot.jpg differ diff --git a/trunk/etherpad/src/static/img/about/people/rhonda-headshot-thumb.jpg b/trunk/etherpad/src/static/img/about/people/rhonda-headshot-thumb.jpg new file mode 100644 index 0000000..8d9358b Binary files /dev/null and b/trunk/etherpad/src/static/img/about/people/rhonda-headshot-thumb.jpg differ diff --git a/trunk/etherpad/src/static/img/about/people/rhonda-headshot.jpg b/trunk/etherpad/src/static/img/about/people/rhonda-headshot.jpg new file mode 100644 index 0000000..b4c4ec8 Binary files /dev/null and b/trunk/etherpad/src/static/img/about/people/rhonda-headshot.jpg differ diff --git a/trunk/etherpad/src/static/img/about/pier38.png b/trunk/etherpad/src/static/img/about/pier38.png new file mode 100644 index 0000000..d15b3a8 Binary files /dev/null and b/trunk/etherpad/src/static/img/about/pier38.png differ diff --git a/trunk/etherpad/src/static/img/about/quote-close.png b/trunk/etherpad/src/static/img/about/quote-close.png new file mode 100644 index 0000000..de4b18b Binary files /dev/null and b/trunk/etherpad/src/static/img/about/quote-close.png differ diff --git a/trunk/etherpad/src/static/img/about/quote-open.png b/trunk/etherpad/src/static/img/about/quote-open.png new file mode 100644 index 0000000..e637705 Binary files /dev/null and b/trunk/etherpad/src/static/img/about/quote-open.png differ diff --git a/trunk/etherpad/src/static/img/about/screencastpreview800x600.jpg b/trunk/etherpad/src/static/img/about/screencastpreview800x600.jpg new file mode 100644 index 0000000..2a4ed39 Binary files /dev/null and b/trunk/etherpad/src/static/img/about/screencastpreview800x600.jpg differ diff --git a/trunk/etherpad/src/static/img/account/betawarn.jpg b/trunk/etherpad/src/static/img/account/betawarn.jpg new file mode 100644 index 0000000..c3cec1b Binary files /dev/null and b/trunk/etherpad/src/static/img/account/betawarn.jpg differ diff --git a/trunk/etherpad/src/static/img/acecarets/000000.gif b/trunk/etherpad/src/static/img/acecarets/000000.gif new file mode 100644 index 0000000..f67bd3d Binary files /dev/null and b/trunk/etherpad/src/static/img/acecarets/000000.gif differ diff --git a/trunk/etherpad/src/static/img/acecarets/666666.gif b/trunk/etherpad/src/static/img/acecarets/666666.gif new file mode 100644 index 0000000..cd8e264 Binary files /dev/null and b/trunk/etherpad/src/static/img/acecarets/666666.gif differ diff --git a/trunk/etherpad/src/static/img/acecarets/999999.gif b/trunk/etherpad/src/static/img/acecarets/999999.gif new file mode 100644 index 0000000..fa75d25 Binary files /dev/null and b/trunk/etherpad/src/static/img/acecarets/999999.gif differ diff --git a/trunk/etherpad/src/static/img/acecarets/default.gif b/trunk/etherpad/src/static/img/acecarets/default.gif new file mode 100644 index 0000000..196d9ff Binary files /dev/null and b/trunk/etherpad/src/static/img/acecarets/default.gif differ diff --git a/trunk/etherpad/src/static/img/apr09/backgrad.png b/trunk/etherpad/src/static/img/apr09/backgrad.png new file mode 100644 index 0000000..c61d830 Binary files /dev/null and b/trunk/etherpad/src/static/img/apr09/backgrad.png differ diff --git a/trunk/etherpad/src/static/img/apr09/black35.png b/trunk/etherpad/src/static/img/apr09/black35.png new file mode 100644 index 0000000..9d82846 Binary files /dev/null and b/trunk/etherpad/src/static/img/apr09/black35.png differ diff --git a/trunk/etherpad/src/static/img/apr09/blank.gif b/trunk/etherpad/src/static/img/apr09/blank.gif new file mode 100644 index 0000000..8fb6fb0 Binary files /dev/null and b/trunk/etherpad/src/static/img/apr09/blank.gif differ diff --git a/trunk/etherpad/src/static/img/apr09/modalbar.gif b/trunk/etherpad/src/static/img/apr09/modalbar.gif new file mode 100644 index 0000000..3e86759 Binary files /dev/null and b/trunk/etherpad/src/static/img/apr09/modalbar.gif differ diff --git a/trunk/etherpad/src/static/img/apr09/newpadicon.gif b/trunk/etherpad/src/static/img/apr09/newpadicon.gif new file mode 100644 index 0000000..a282728 Binary files /dev/null and b/trunk/etherpad/src/static/img/apr09/newpadicon.gif differ diff --git a/trunk/etherpad/src/static/img/apr09/shadbot.png b/trunk/etherpad/src/static/img/apr09/shadbot.png new file mode 100644 index 0000000..9506058 Binary files /dev/null and b/trunk/etherpad/src/static/img/apr09/shadbot.png differ diff --git a/trunk/etherpad/src/static/img/apr09/shadleft.png b/trunk/etherpad/src/static/img/apr09/shadleft.png new file mode 100644 index 0000000..72049e0 Binary files /dev/null and b/trunk/etherpad/src/static/img/apr09/shadleft.png differ diff --git a/trunk/etherpad/src/static/img/apr09/shadleftbot.png b/trunk/etherpad/src/static/img/apr09/shadleftbot.png new file mode 100644 index 0000000..7d3fb5b Binary files /dev/null and b/trunk/etherpad/src/static/img/apr09/shadleftbot.png differ diff --git a/trunk/etherpad/src/static/img/apr09/shadlefttop.png b/trunk/etherpad/src/static/img/apr09/shadlefttop.png new file mode 100644 index 0000000..9af4e90 Binary files /dev/null and b/trunk/etherpad/src/static/img/apr09/shadlefttop.png differ diff --git a/trunk/etherpad/src/static/img/apr09/shadright.png b/trunk/etherpad/src/static/img/apr09/shadright.png new file mode 100644 index 0000000..41d099c Binary files /dev/null and b/trunk/etherpad/src/static/img/apr09/shadright.png differ diff --git a/trunk/etherpad/src/static/img/apr09/shadrightbot.png b/trunk/etherpad/src/static/img/apr09/shadrightbot.png new file mode 100644 index 0000000..6770ec5 Binary files /dev/null and b/trunk/etherpad/src/static/img/apr09/shadrightbot.png differ diff --git a/trunk/etherpad/src/static/img/apr09/shadrighttop.png b/trunk/etherpad/src/static/img/apr09/shadrighttop.png new file mode 100644 index 0000000..0f7a0ba Binary files /dev/null and b/trunk/etherpad/src/static/img/apr09/shadrighttop.png differ diff --git a/trunk/etherpad/src/static/img/apr09/topbar.gif b/trunk/etherpad/src/static/img/apr09/topbar.gif new file mode 100644 index 0000000..65ed7c8 Binary files /dev/null and b/trunk/etherpad/src/static/img/apr09/topbar.gif differ diff --git a/trunk/etherpad/src/static/img/apr09/topbarlogo.gif b/trunk/etherpad/src/static/img/apr09/topbarlogo.gif new file mode 100644 index 0000000..9a3aa77 Binary files /dev/null and b/trunk/etherpad/src/static/img/apr09/topbarlogo.gif differ diff --git a/trunk/etherpad/src/static/img/apr09/widthfull.gif b/trunk/etherpad/src/static/img/apr09/widthfull.gif new file mode 100644 index 0000000..8850ec2 Binary files /dev/null and b/trunk/etherpad/src/static/img/apr09/widthfull.gif differ diff --git a/trunk/etherpad/src/static/img/apr09/widthfullactive.gif b/trunk/etherpad/src/static/img/apr09/widthfullactive.gif new file mode 100644 index 0000000..36b566f Binary files /dev/null and b/trunk/etherpad/src/static/img/apr09/widthfullactive.gif differ diff --git a/trunk/etherpad/src/static/img/apr09/widthlim.gif b/trunk/etherpad/src/static/img/apr09/widthlim.gif new file mode 100644 index 0000000..551e741 Binary files /dev/null and b/trunk/etherpad/src/static/img/apr09/widthlim.gif differ diff --git a/trunk/etherpad/src/static/img/apr09/widthlimactive.gif b/trunk/etherpad/src/static/img/apr09/widthlimactive.gif new file mode 100644 index 0000000..8cf0194 Binary files /dev/null and b/trunk/etherpad/src/static/img/apr09/widthlimactive.gif differ diff --git a/trunk/etherpad/src/static/img/billing/amex.gif b/trunk/etherpad/src/static/img/billing/amex.gif new file mode 100644 index 0000000..96e2cbb Binary files /dev/null and b/trunk/etherpad/src/static/img/billing/amex.gif differ diff --git a/trunk/etherpad/src/static/img/billing/creditcard.gif b/trunk/etherpad/src/static/img/billing/creditcard.gif new file mode 100644 index 0000000..ac2353e Binary files /dev/null and b/trunk/etherpad/src/static/img/billing/creditcard.gif differ diff --git a/trunk/etherpad/src/static/img/billing/csc-help.gif b/trunk/etherpad/src/static/img/billing/csc-help.gif new file mode 100644 index 0000000..1afb6b7 Binary files /dev/null and b/trunk/etherpad/src/static/img/billing/csc-help.gif differ diff --git a/trunk/etherpad/src/static/img/billing/disc.gif b/trunk/etherpad/src/static/img/billing/disc.gif new file mode 100644 index 0000000..a5e3a90 Binary files /dev/null and b/trunk/etherpad/src/static/img/billing/disc.gif differ diff --git a/trunk/etherpad/src/static/img/billing/invoice.gif b/trunk/etherpad/src/static/img/billing/invoice.gif new file mode 100644 index 0000000..cee681a Binary files /dev/null and b/trunk/etherpad/src/static/img/billing/invoice.gif differ diff --git a/trunk/etherpad/src/static/img/billing/mc.gif b/trunk/etherpad/src/static/img/billing/mc.gif new file mode 100644 index 0000000..2331849 Binary files /dev/null and b/trunk/etherpad/src/static/img/billing/mc.gif differ diff --git a/trunk/etherpad/src/static/img/billing/paypal.gif b/trunk/etherpad/src/static/img/billing/paypal.gif new file mode 100644 index 0000000..25333b1 Binary files /dev/null and b/trunk/etherpad/src/static/img/billing/paypal.gif differ diff --git a/trunk/etherpad/src/static/img/billing/visa.gif b/trunk/etherpad/src/static/img/billing/visa.gif new file mode 100644 index 0000000..4769f0c Binary files /dev/null and b/trunk/etherpad/src/static/img/billing/visa.gif differ diff --git a/trunk/etherpad/src/static/img/blog/posts/new-features/fullwidth.gif b/trunk/etherpad/src/static/img/blog/posts/new-features/fullwidth.gif new file mode 100644 index 0000000..73f427d Binary files /dev/null and b/trunk/etherpad/src/static/img/blog/posts/new-features/fullwidth.gif differ diff --git a/trunk/etherpad/src/static/img/blog/posts/new-features/importexport.gif b/trunk/etherpad/src/static/img/blog/posts/new-features/importexport.gif new file mode 100644 index 0000000..f0d2bac Binary files /dev/null and b/trunk/etherpad/src/static/img/blog/posts/new-features/importexport.gif differ diff --git a/trunk/etherpad/src/static/img/blog/posts/new-features/richtext.gif b/trunk/etherpad/src/static/img/blog/posts/new-features/richtext.gif new file mode 100644 index 0000000..5d03bdc Binary files /dev/null and b/trunk/etherpad/src/static/img/blog/posts/new-features/richtext.gif differ diff --git a/trunk/etherpad/src/static/img/blog/posts/new-features/viewzoom.gif b/trunk/etherpad/src/static/img/blog/posts/new-features/viewzoom.gif new file mode 100644 index 0000000..47e1caa Binary files /dev/null and b/trunk/etherpad/src/static/img/blog/posts/new-features/viewzoom.gif differ diff --git a/trunk/etherpad/src/static/img/blog/posts/pricing-survey-results.png b/trunk/etherpad/src/static/img/blog/posts/pricing-survey-results.png new file mode 100644 index 0000000..668dd72 Binary files /dev/null and b/trunk/etherpad/src/static/img/blog/posts/pricing-survey-results.png differ diff --git a/trunk/etherpad/src/static/img/blog/posts/pricing-survey.png b/trunk/etherpad/src/static/img/blog/posts/pricing-survey.png new file mode 100644 index 0000000..7289aa8 Binary files /dev/null and b/trunk/etherpad/src/static/img/blog/posts/pricing-survey.png differ diff --git a/trunk/etherpad/src/static/img/blog/posts/time-slider-screenshot.gif b/trunk/etherpad/src/static/img/blog/posts/time-slider-screenshot.gif new file mode 100644 index 0000000..782ac15 Binary files /dev/null and b/trunk/etherpad/src/static/img/blog/posts/time-slider-screenshot.gif differ diff --git a/trunk/etherpad/src/static/img/davy/bg/home-createpad.png b/trunk/etherpad/src/static/img/davy/bg/home-createpad.png new file mode 100644 index 0000000..e34e643 Binary files /dev/null and b/trunk/etherpad/src/static/img/davy/bg/home-createpad.png differ diff --git a/trunk/etherpad/src/static/img/davy/bg/home-features-bottom.gif b/trunk/etherpad/src/static/img/davy/bg/home-features-bottom.gif new file mode 100644 index 0000000..7dc7644 Binary files /dev/null and b/trunk/etherpad/src/static/img/davy/bg/home-features-bottom.gif differ diff --git a/trunk/etherpad/src/static/img/davy/bg/home-features-free-bottom.gif b/trunk/etherpad/src/static/img/davy/bg/home-features-free-bottom.gif new file mode 100644 index 0000000..3bd7ba8 Binary files /dev/null and b/trunk/etherpad/src/static/img/davy/bg/home-features-free-bottom.gif differ diff --git a/trunk/etherpad/src/static/img/davy/bg/home-features-paid-top.gif b/trunk/etherpad/src/static/img/davy/bg/home-features-paid-top.gif new file mode 100644 index 0000000..faed96c Binary files /dev/null and b/trunk/etherpad/src/static/img/davy/bg/home-features-paid-top.gif differ diff --git a/trunk/etherpad/src/static/img/davy/bg/home-features-top.gif b/trunk/etherpad/src/static/img/davy/bg/home-features-top.gif new file mode 100644 index 0000000..2db70a6 Binary files /dev/null and b/trunk/etherpad/src/static/img/davy/bg/home-features-top.gif differ diff --git a/trunk/etherpad/src/static/img/davy/bg/home-nav-selected.png b/trunk/etherpad/src/static/img/davy/bg/home-nav-selected.png new file mode 100644 index 0000000..01c0a99 Binary files /dev/null and b/trunk/etherpad/src/static/img/davy/bg/home-nav-selected.png differ diff --git a/trunk/etherpad/src/static/img/davy/bg/home-screencast.png b/trunk/etherpad/src/static/img/davy/bg/home-screencast.png new file mode 100644 index 0000000..e03b83d Binary files /dev/null and b/trunk/etherpad/src/static/img/davy/bg/home-screencast.png differ diff --git a/trunk/etherpad/src/static/img/davy/bg/home2.png b/trunk/etherpad/src/static/img/davy/bg/home2.png new file mode 100644 index 0000000..814c339 Binary files /dev/null and b/trunk/etherpad/src/static/img/davy/bg/home2.png differ diff --git a/trunk/etherpad/src/static/img/davy/bg/product-nav-selected-white.png b/trunk/etherpad/src/static/img/davy/bg/product-nav-selected-white.png new file mode 100644 index 0000000..4365d4a Binary files /dev/null and b/trunk/etherpad/src/static/img/davy/bg/product-nav-selected-white.png differ diff --git a/trunk/etherpad/src/static/img/davy/bg/product-nav-selected.png b/trunk/etherpad/src/static/img/davy/bg/product-nav-selected.png new file mode 100644 index 0000000..a3094d0 Binary files /dev/null and b/trunk/etherpad/src/static/img/davy/bg/product-nav-selected.png differ diff --git a/trunk/etherpad/src/static/img/davy/bg/product.png b/trunk/etherpad/src/static/img/davy/bg/product.png new file mode 100644 index 0000000..5a6f6f2 Binary files /dev/null and b/trunk/etherpad/src/static/img/davy/bg/product.png differ diff --git a/trunk/etherpad/src/static/img/davy/btn/createpad-home.gif b/trunk/etherpad/src/static/img/davy/btn/createpad-home.gif new file mode 100644 index 0000000..5a46f02 Binary files /dev/null and b/trunk/etherpad/src/static/img/davy/btn/createpad-home.gif differ diff --git a/trunk/etherpad/src/static/img/davy/btn/createpad-large.gif b/trunk/etherpad/src/static/img/davy/btn/createpad-large.gif new file mode 100644 index 0000000..9e37808 Binary files /dev/null and b/trunk/etherpad/src/static/img/davy/btn/createpad-large.gif differ diff --git a/trunk/etherpad/src/static/img/davy/btn/createpad-small.gif b/trunk/etherpad/src/static/img/davy/btn/createpad-small.gif new file mode 100644 index 0000000..5df6502 Binary files /dev/null and b/trunk/etherpad/src/static/img/davy/btn/createpad-small.gif differ diff --git a/trunk/etherpad/src/static/img/davy/btn/intro-screencast.png b/trunk/etherpad/src/static/img/davy/btn/intro-screencast.png new file mode 100644 index 0000000..8343ddf Binary files /dev/null and b/trunk/etherpad/src/static/img/davy/btn/intro-screencast.png differ diff --git a/trunk/etherpad/src/static/img/davy/btn/intro-testimonials.png b/trunk/etherpad/src/static/img/davy/btn/intro-testimonials.png new file mode 100644 index 0000000..b1df4f2 Binary files /dev/null and b/trunk/etherpad/src/static/img/davy/btn/intro-testimonials.png differ diff --git a/trunk/etherpad/src/static/img/davy/btn/learnmore.gif b/trunk/etherpad/src/static/img/davy/btn/learnmore.gif new file mode 100644 index 0000000..9f0f612 Binary files /dev/null and b/trunk/etherpad/src/static/img/davy/btn/learnmore.gif differ diff --git a/trunk/etherpad/src/static/img/davy/btn/signup-home-2.gif b/trunk/etherpad/src/static/img/davy/btn/signup-home-2.gif new file mode 100644 index 0000000..1aea6ff Binary files /dev/null and b/trunk/etherpad/src/static/img/davy/btn/signup-home-2.gif differ diff --git a/trunk/etherpad/src/static/img/davy/btn/signup-home-3.gif b/trunk/etherpad/src/static/img/davy/btn/signup-home-3.gif new file mode 100644 index 0000000..a237242 Binary files /dev/null and b/trunk/etherpad/src/static/img/davy/btn/signup-home-3.gif differ diff --git a/trunk/etherpad/src/static/img/davy/btn/signup-home-4.gif b/trunk/etherpad/src/static/img/davy/btn/signup-home-4.gif new file mode 100644 index 0000000..966371e Binary files /dev/null and b/trunk/etherpad/src/static/img/davy/btn/signup-home-4.gif differ diff --git a/trunk/etherpad/src/static/img/davy/btn/signup-home.gif b/trunk/etherpad/src/static/img/davy/btn/signup-home.gif new file mode 100644 index 0000000..0a83858 Binary files /dev/null and b/trunk/etherpad/src/static/img/davy/btn/signup-home.gif differ diff --git a/trunk/etherpad/src/static/img/davy/btn/uses-more.gif b/trunk/etherpad/src/static/img/davy/btn/uses-more.gif new file mode 100644 index 0000000..6a73bbc Binary files /dev/null and b/trunk/etherpad/src/static/img/davy/btn/uses-more.gif differ diff --git a/trunk/etherpad/src/static/img/davy/gfx/32/114.png b/trunk/etherpad/src/static/img/davy/gfx/32/114.png new file mode 100644 index 0000000..cbab795 Binary files /dev/null and b/trunk/etherpad/src/static/img/davy/gfx/32/114.png differ diff --git a/trunk/etherpad/src/static/img/davy/gfx/32/15.png b/trunk/etherpad/src/static/img/davy/gfx/32/15.png new file mode 100644 index 0000000..596fd0f Binary files /dev/null and b/trunk/etherpad/src/static/img/davy/gfx/32/15.png differ diff --git a/trunk/etherpad/src/static/img/davy/gfx/32/65.png b/trunk/etherpad/src/static/img/davy/gfx/32/65.png new file mode 100644 index 0000000..c331ee1 Binary files /dev/null and b/trunk/etherpad/src/static/img/davy/gfx/32/65.png differ diff --git a/trunk/etherpad/src/static/img/davy/gfx/32/78.png b/trunk/etherpad/src/static/img/davy/gfx/32/78.png new file mode 100644 index 0000000..fae3f29 Binary files /dev/null and b/trunk/etherpad/src/static/img/davy/gfx/32/78.png differ diff --git a/trunk/etherpad/src/static/img/davy/gfx/bullet.gif b/trunk/etherpad/src/static/img/davy/gfx/bullet.gif new file mode 100644 index 0000000..cb2e123 Binary files /dev/null and b/trunk/etherpad/src/static/img/davy/gfx/bullet.gif differ diff --git a/trunk/etherpad/src/static/img/davy/gfx/home-logo2.gif b/trunk/etherpad/src/static/img/davy/gfx/home-logo2.gif new file mode 100644 index 0000000..24b67bd Binary files /dev/null and b/trunk/etherpad/src/static/img/davy/gfx/home-logo2.gif differ diff --git a/trunk/etherpad/src/static/img/davy/gfx/home-screencast.png b/trunk/etherpad/src/static/img/davy/gfx/home-screencast.png new file mode 100644 index 0000000..b5516d3 Binary files /dev/null and b/trunk/etherpad/src/static/img/davy/gfx/home-screencast.png differ diff --git a/trunk/etherpad/src/static/img/davy/gfx/plane.gif b/trunk/etherpad/src/static/img/davy/gfx/plane.gif new file mode 100644 index 0000000..cf3226e Binary files /dev/null and b/trunk/etherpad/src/static/img/davy/gfx/plane.gif differ diff --git a/trunk/etherpad/src/static/img/davy/gfx/product-logo.gif b/trunk/etherpad/src/static/img/davy/gfx/product-logo.gif new file mode 100644 index 0000000..72975bb Binary files /dev/null and b/trunk/etherpad/src/static/img/davy/gfx/product-logo.gif differ diff --git a/trunk/etherpad/src/static/img/davy/gfx/screenshot.gif b/trunk/etherpad/src/static/img/davy/gfx/screenshot.gif new file mode 100644 index 0000000..ba87f99 Binary files /dev/null and b/trunk/etherpad/src/static/img/davy/gfx/screenshot.gif differ diff --git a/trunk/etherpad/src/static/img/davy/gfx/use-meetings.gif b/trunk/etherpad/src/static/img/davy/gfx/use-meetings.gif new file mode 100644 index 0000000..3451969 Binary files /dev/null and b/trunk/etherpad/src/static/img/davy/gfx/use-meetings.gif differ diff --git a/trunk/etherpad/src/static/img/davy/gfx/use-meetings.png b/trunk/etherpad/src/static/img/davy/gfx/use-meetings.png new file mode 100644 index 0000000..4e41581 Binary files /dev/null and b/trunk/etherpad/src/static/img/davy/gfx/use-meetings.png differ diff --git a/trunk/etherpad/src/static/img/davy/gfx/use-programming.gif b/trunk/etherpad/src/static/img/davy/gfx/use-programming.gif new file mode 100644 index 0000000..795e7fd Binary files /dev/null and b/trunk/etherpad/src/static/img/davy/gfx/use-programming.gif differ diff --git a/trunk/etherpad/src/static/img/davy/gfx/use-programming.png b/trunk/etherpad/src/static/img/davy/gfx/use-programming.png new file mode 100644 index 0000000..825095d Binary files /dev/null and b/trunk/etherpad/src/static/img/davy/gfx/use-programming.png differ diff --git a/trunk/etherpad/src/static/img/davy/gfx/use-writing.gif b/trunk/etherpad/src/static/img/davy/gfx/use-writing.gif new file mode 100644 index 0000000..0e2d11b Binary files /dev/null and b/trunk/etherpad/src/static/img/davy/gfx/use-writing.gif differ diff --git a/trunk/etherpad/src/static/img/davy/gfx/use-writing.png b/trunk/etherpad/src/static/img/davy/gfx/use-writing.png new file mode 100644 index 0000000..c6e267c Binary files /dev/null and b/trunk/etherpad/src/static/img/davy/gfx/use-writing.png differ diff --git a/trunk/etherpad/src/static/img/davy/txt/home-button.gif b/trunk/etherpad/src/static/img/davy/txt/home-button.gif new file mode 100644 index 0000000..bdf4945 Binary files /dev/null and b/trunk/etherpad/src/static/img/davy/txt/home-button.gif differ diff --git a/trunk/etherpad/src/static/img/featuretour/code.gif b/trunk/etherpad/src/static/img/featuretour/code.gif new file mode 100644 index 0000000..abff862 Binary files /dev/null and b/trunk/etherpad/src/static/img/featuretour/code.gif differ diff --git a/trunk/etherpad/src/static/img/featuretour/edits.gif b/trunk/etherpad/src/static/img/featuretour/edits.gif new file mode 100644 index 0000000..d38f83a Binary files /dev/null and b/trunk/etherpad/src/static/img/featuretour/edits.gif differ diff --git a/trunk/etherpad/src/static/img/featuretour/editsandusers.gif b/trunk/etherpad/src/static/img/featuretour/editsandusers.gif new file mode 100644 index 0000000..90c36f8 Binary files /dev/null and b/trunk/etherpad/src/static/img/featuretour/editsandusers.gif differ diff --git a/trunk/etherpad/src/static/img/featuretour/padlock.png b/trunk/etherpad/src/static/img/featuretour/padlock.png new file mode 100644 index 0000000..f6d6c05 Binary files /dev/null and b/trunk/etherpad/src/static/img/featuretour/padlock.png differ diff --git a/trunk/etherpad/src/static/img/featuretour/revisions.gif b/trunk/etherpad/src/static/img/featuretour/revisions.gif new file mode 100644 index 0000000..a0d8220 Binary files /dev/null and b/trunk/etherpad/src/static/img/featuretour/revisions.gif differ diff --git a/trunk/etherpad/src/static/img/featuretour/users.gif b/trunk/etherpad/src/static/img/featuretour/users.gif new file mode 100644 index 0000000..48b4470 Binary files /dev/null and b/trunk/etherpad/src/static/img/featuretour/users.gif differ diff --git a/trunk/etherpad/src/static/img/feb09/framedheaderback.gif b/trunk/etherpad/src/static/img/feb09/framedheaderback.gif new file mode 100644 index 0000000..5b17b9f Binary files /dev/null and b/trunk/etherpad/src/static/img/feb09/framedheaderback.gif differ diff --git a/trunk/etherpad/src/static/img/feb09/framedheaderlogo.gif b/trunk/etherpad/src/static/img/feb09/framedheaderlogo.gif new file mode 100644 index 0000000..01de8cd Binary files /dev/null and b/trunk/etherpad/src/static/img/feb09/framedheaderlogo.gif differ diff --git a/trunk/etherpad/src/static/img/feb09/home_firstp.gif b/trunk/etherpad/src/static/img/feb09/home_firstp.gif new file mode 100644 index 0000000..af0a2cd Binary files /dev/null and b/trunk/etherpad/src/static/img/feb09/home_firstp.gif differ diff --git a/trunk/etherpad/src/static/img/feb09/home_firstp.png b/trunk/etherpad/src/static/img/feb09/home_firstp.png new file mode 100644 index 0000000..cb7fc8c Binary files /dev/null and b/trunk/etherpad/src/static/img/feb09/home_firstp.png differ diff --git a/trunk/etherpad/src/static/img/feb09/home_firstp2.gif b/trunk/etherpad/src/static/img/feb09/home_firstp2.gif new file mode 100644 index 0000000..9e0ed1e Binary files /dev/null and b/trunk/etherpad/src/static/img/feb09/home_firstp2.gif differ diff --git a/trunk/etherpad/src/static/img/feb09/home_h1.gif b/trunk/etherpad/src/static/img/feb09/home_h1.gif new file mode 100644 index 0000000..1fe08cb Binary files /dev/null and b/trunk/etherpad/src/static/img/feb09/home_h1.gif differ diff --git a/trunk/etherpad/src/static/img/feb09/home_h1.png b/trunk/etherpad/src/static/img/feb09/home_h1.png new file mode 100644 index 0000000..1b5784d Binary files /dev/null and b/trunk/etherpad/src/static/img/feb09/home_h1.png differ diff --git a/trunk/etherpad/src/static/img/feb09/home_newpadbutton.gif b/trunk/etherpad/src/static/img/feb09/home_newpadbutton.gif new file mode 100644 index 0000000..8706407 Binary files /dev/null and b/trunk/etherpad/src/static/img/feb09/home_newpadbutton.gif differ diff --git a/trunk/etherpad/src/static/img/feb09/home_newpadbutton.png b/trunk/etherpad/src/static/img/feb09/home_newpadbutton.png new file mode 100644 index 0000000..ead253c Binary files /dev/null and b/trunk/etherpad/src/static/img/feb09/home_newpadbutton.png differ diff --git a/trunk/etherpad/src/static/img/feb09/home_newpadbutton2.gif b/trunk/etherpad/src/static/img/feb09/home_newpadbutton2.gif new file mode 100644 index 0000000..ba5d478 Binary files /dev/null and b/trunk/etherpad/src/static/img/feb09/home_newpadbutton2.gif differ diff --git a/trunk/etherpad/src/static/img/feb09/home_newpadbutton_eepnet.gif b/trunk/etherpad/src/static/img/feb09/home_newpadbutton_eepnet.gif new file mode 100644 index 0000000..a365351 Binary files /dev/null and b/trunk/etherpad/src/static/img/feb09/home_newpadbutton_eepnet.gif differ diff --git a/trunk/etherpad/src/static/img/feb09/hometop_back.gif b/trunk/etherpad/src/static/img/feb09/hometop_back.gif new file mode 100644 index 0000000..7cdd406 Binary files /dev/null and b/trunk/etherpad/src/static/img/feb09/hometop_back.gif differ diff --git a/trunk/etherpad/src/static/img/feb09/nav1.gif b/trunk/etherpad/src/static/img/feb09/nav1.gif new file mode 100644 index 0000000..4af4869 Binary files /dev/null and b/trunk/etherpad/src/static/img/feb09/nav1.gif differ diff --git a/trunk/etherpad/src/static/img/feb09/nav1_back.gif b/trunk/etherpad/src/static/img/feb09/nav1_back.gif new file mode 100644 index 0000000..d2db7ee Binary files /dev/null and b/trunk/etherpad/src/static/img/feb09/nav1_back.gif differ diff --git a/trunk/etherpad/src/static/img/feb09/nav2.gif b/trunk/etherpad/src/static/img/feb09/nav2.gif new file mode 100644 index 0000000..f43a40e Binary files /dev/null and b/trunk/etherpad/src/static/img/feb09/nav2.gif differ diff --git a/trunk/etherpad/src/static/img/feb09/screencast.gif b/trunk/etherpad/src/static/img/feb09/screencast.gif new file mode 100644 index 0000000..3819082 Binary files /dev/null and b/trunk/etherpad/src/static/img/feb09/screencast.gif differ diff --git a/trunk/etherpad/src/static/img/home/etherpad-mainheader1.jpg b/trunk/etherpad/src/static/img/home/etherpad-mainheader1.jpg new file mode 100644 index 0000000..ed7e830 Binary files /dev/null and b/trunk/etherpad/src/static/img/home/etherpad-mainheader1.jpg differ diff --git a/trunk/etherpad/src/static/img/home/headergradient.gif b/trunk/etherpad/src/static/img/home/headergradient.gif new file mode 100644 index 0000000..d6526dc Binary files /dev/null and b/trunk/etherpad/src/static/img/home/headergradient.gif differ diff --git a/trunk/etherpad/src/static/img/home/homeheader1.jpg b/trunk/etherpad/src/static/img/home/homeheader1.jpg new file mode 100644 index 0000000..3436158 Binary files /dev/null and b/trunk/etherpad/src/static/img/home/homeheader1.jpg differ diff --git a/trunk/etherpad/src/static/img/home/homeheader2.jpg b/trunk/etherpad/src/static/img/home/homeheader2.jpg new file mode 100644 index 0000000..e19ba41 Binary files /dev/null and b/trunk/etherpad/src/static/img/home/homeheader2.jpg differ diff --git a/trunk/etherpad/src/static/img/home/leftgrad.gif b/trunk/etherpad/src/static/img/home/leftgrad.gif new file mode 100644 index 0000000..ff3931a Binary files /dev/null and b/trunk/etherpad/src/static/img/home/leftgrad.gif differ diff --git a/trunk/etherpad/src/static/img/home/pencilpaperback.png b/trunk/etherpad/src/static/img/home/pencilpaperback.png new file mode 100644 index 0000000..e0d2f9d Binary files /dev/null and b/trunk/etherpad/src/static/img/home/pencilpaperback.png differ diff --git a/trunk/etherpad/src/static/img/home/screencapture1.gif b/trunk/etherpad/src/static/img/home/screencapture1.gif new file mode 100644 index 0000000..7c3ce5a Binary files /dev/null and b/trunk/etherpad/src/static/img/home/screencapture1.gif differ diff --git a/trunk/etherpad/src/static/img/home/underdevicon.gif b/trunk/etherpad/src/static/img/home/underdevicon.gif new file mode 100644 index 0000000..5b75fd1 Binary files /dev/null and b/trunk/etherpad/src/static/img/home/underdevicon.gif differ diff --git a/trunk/etherpad/src/static/img/icon/downarrow.gif b/trunk/etherpad/src/static/img/icon/downarrow.gif new file mode 100644 index 0000000..6389439 Binary files /dev/null and b/trunk/etherpad/src/static/img/icon/downarrow.gif differ diff --git a/trunk/etherpad/src/static/img/icon/feed.gif b/trunk/etherpad/src/static/img/icon/feed.gif new file mode 100644 index 0000000..fb9b66c Binary files /dev/null and b/trunk/etherpad/src/static/img/icon/feed.gif differ diff --git a/trunk/etherpad/src/static/img/jun09/pad/backgrad.gif b/trunk/etherpad/src/static/img/jun09/pad/backgrad.gif new file mode 100644 index 0000000..8fee1a5 Binary files /dev/null and b/trunk/etherpad/src/static/img/jun09/pad/backgrad.gif differ diff --git a/trunk/etherpad/src/static/img/jun09/pad/bottomareagfx.gif b/trunk/etherpad/src/static/img/jun09/pad/bottomareagfx.gif new file mode 100644 index 0000000..c499a62 Binary files /dev/null and b/trunk/etherpad/src/static/img/jun09/pad/bottomareagfx.gif differ diff --git a/trunk/etherpad/src/static/img/jun09/pad/colorpicker.gif b/trunk/etherpad/src/static/img/jun09/pad/colorpicker.gif new file mode 100644 index 0000000..602e7e6 Binary files /dev/null and b/trunk/etherpad/src/static/img/jun09/pad/colorpicker.gif differ diff --git a/trunk/etherpad/src/static/img/jun09/pad/connectingbar.gif b/trunk/etherpad/src/static/img/jun09/pad/connectingbar.gif new file mode 100644 index 0000000..34f54e9 Binary files /dev/null and b/trunk/etherpad/src/static/img/jun09/pad/connectingbar.gif differ diff --git a/trunk/etherpad/src/static/img/jun09/pad/connectionindicator.gif b/trunk/etherpad/src/static/img/jun09/pad/connectionindicator.gif new file mode 100644 index 0000000..ecc270d Binary files /dev/null and b/trunk/etherpad/src/static/img/jun09/pad/connectionindicator.gif differ diff --git a/trunk/etherpad/src/static/img/jun09/pad/docbarstates.png b/trunk/etherpad/src/static/img/jun09/pad/docbarstates.png new file mode 100644 index 0000000..13a5913 Binary files /dev/null and b/trunk/etherpad/src/static/img/jun09/pad/docbarstates.png differ diff --git a/trunk/etherpad/src/static/img/jun09/pad/docbarstates2.png b/trunk/etherpad/src/static/img/jun09/pad/docbarstates2.png new file mode 100644 index 0000000..9e26b1d Binary files /dev/null and b/trunk/etherpad/src/static/img/jun09/pad/docbarstates2.png differ diff --git a/trunk/etherpad/src/static/img/jun09/pad/docbarstates3.png b/trunk/etherpad/src/static/img/jun09/pad/docbarstates3.png new file mode 100644 index 0000000..cdc6a45 Binary files /dev/null and b/trunk/etherpad/src/static/img/jun09/pad/docbarstates3.png differ diff --git a/trunk/etherpad/src/static/img/jun09/pad/docpaneledge.png b/trunk/etherpad/src/static/img/jun09/pad/docpaneledge.png new file mode 100644 index 0000000..de22d6a Binary files /dev/null and b/trunk/etherpad/src/static/img/jun09/pad/docpaneledge.png differ diff --git a/trunk/etherpad/src/static/img/jun09/pad/docpaneledge2.png b/trunk/etherpad/src/static/img/jun09/pad/docpaneledge2.png new file mode 100644 index 0000000..c119c74 Binary files /dev/null and b/trunk/etherpad/src/static/img/jun09/pad/docpaneledge2.png differ diff --git a/trunk/etherpad/src/static/img/jun09/pad/docpanelmiddle.png b/trunk/etherpad/src/static/img/jun09/pad/docpanelmiddle.png new file mode 100644 index 0000000..9290e86 Binary files /dev/null and b/trunk/etherpad/src/static/img/jun09/pad/docpanelmiddle.png differ diff --git a/trunk/etherpad/src/static/img/jun09/pad/docpanelmiddle2.png b/trunk/etherpad/src/static/img/jun09/pad/docpanelmiddle2.png new file mode 100644 index 0000000..d251c23 Binary files /dev/null and b/trunk/etherpad/src/static/img/jun09/pad/docpanelmiddle2.png differ diff --git a/trunk/etherpad/src/static/img/jun09/pad/editbar.gif b/trunk/etherpad/src/static/img/jun09/pad/editbar.gif new file mode 100644 index 0000000..eb7100c Binary files /dev/null and b/trunk/etherpad/src/static/img/jun09/pad/editbar.gif differ diff --git a/trunk/etherpad/src/static/img/jun09/pad/editbar2.gif b/trunk/etherpad/src/static/img/jun09/pad/editbar2.gif new file mode 100644 index 0000000..d222fb8 Binary files /dev/null and b/trunk/etherpad/src/static/img/jun09/pad/editbar2.gif differ diff --git a/trunk/etherpad/src/static/img/jun09/pad/editbar3.png b/trunk/etherpad/src/static/img/jun09/pad/editbar3.png new file mode 100644 index 0000000..ff65146 Binary files /dev/null and b/trunk/etherpad/src/static/img/jun09/pad/editbar3.png differ diff --git a/trunk/etherpad/src/static/img/jun09/pad/editbar3.xcf b/trunk/etherpad/src/static/img/jun09/pad/editbar3.xcf new file mode 100644 index 0000000..91cae20 Binary files /dev/null and b/trunk/etherpad/src/static/img/jun09/pad/editbar3.xcf differ diff --git a/trunk/etherpad/src/static/img/jun09/pad/editbarback.gif b/trunk/etherpad/src/static/img/jun09/pad/editbarback.gif new file mode 100644 index 0000000..ab51802 Binary files /dev/null and b/trunk/etherpad/src/static/img/jun09/pad/editbarback.gif differ diff --git a/trunk/etherpad/src/static/img/jun09/pad/feedbackbox2.gif b/trunk/etherpad/src/static/img/jun09/pad/feedbackbox2.gif new file mode 100644 index 0000000..f1b8f5b Binary files /dev/null and b/trunk/etherpad/src/static/img/jun09/pad/feedbackbox2.gif differ diff --git a/trunk/etherpad/src/static/img/jun09/pad/fileicons.gif b/trunk/etherpad/src/static/img/jun09/pad/fileicons.gif new file mode 100644 index 0000000..26f6388 Binary files /dev/null and b/trunk/etherpad/src/static/img/jun09/pad/fileicons.gif differ diff --git a/trunk/etherpad/src/static/img/jun09/pad/hdraggie.gif b/trunk/etherpad/src/static/img/jun09/pad/hdraggie.gif new file mode 100644 index 0000000..0a6fe3e Binary files /dev/null and b/trunk/etherpad/src/static/img/jun09/pad/hdraggie.gif differ diff --git a/trunk/etherpad/src/static/img/jun09/pad/inviteshare.gif b/trunk/etherpad/src/static/img/jun09/pad/inviteshare.gif new file mode 100644 index 0000000..55345e5 Binary files /dev/null and b/trunk/etherpad/src/static/img/jun09/pad/inviteshare.gif differ diff --git a/trunk/etherpad/src/static/img/jun09/pad/inviteshare2.gif b/trunk/etherpad/src/static/img/jun09/pad/inviteshare2.gif new file mode 100644 index 0000000..98d4c85 Binary files /dev/null and b/trunk/etherpad/src/static/img/jun09/pad/inviteshare2.gif differ diff --git a/trunk/etherpad/src/static/img/jun09/pad/layoutbuttons.gif b/trunk/etherpad/src/static/img/jun09/pad/layoutbuttons.gif new file mode 100644 index 0000000..ea43432 Binary files /dev/null and b/trunk/etherpad/src/static/img/jun09/pad/layoutbuttons.gif differ diff --git a/trunk/etherpad/src/static/img/jun09/pad/overlay.png b/trunk/etherpad/src/static/img/jun09/pad/overlay.png new file mode 100644 index 0000000..46abff3 Binary files /dev/null and b/trunk/etherpad/src/static/img/jun09/pad/overlay.png differ diff --git a/trunk/etherpad/src/static/img/jun09/pad/overlay2.png b/trunk/etherpad/src/static/img/jun09/pad/overlay2.png new file mode 100644 index 0000000..c3d3f1c Binary files /dev/null and b/trunk/etherpad/src/static/img/jun09/pad/overlay2.png differ diff --git a/trunk/etherpad/src/static/img/jun09/pad/padtop.gif b/trunk/etherpad/src/static/img/jun09/pad/padtop.gif new file mode 100644 index 0000000..9e77b07 Binary files /dev/null and b/trunk/etherpad/src/static/img/jun09/pad/padtop.gif differ diff --git a/trunk/etherpad/src/static/img/jun09/pad/padtop2.gif b/trunk/etherpad/src/static/img/jun09/pad/padtop2.gif new file mode 100644 index 0000000..1e3d8c2 Binary files /dev/null and b/trunk/etherpad/src/static/img/jun09/pad/padtop2.gif differ diff --git a/trunk/etherpad/src/static/img/jun09/pad/padtop3.gif b/trunk/etherpad/src/static/img/jun09/pad/padtop3.gif new file mode 100644 index 0000000..b6bc589 Binary files /dev/null and b/trunk/etherpad/src/static/img/jun09/pad/padtop3.gif differ diff --git a/trunk/etherpad/src/static/img/jun09/pad/padtop4.gif b/trunk/etherpad/src/static/img/jun09/pad/padtop4.gif new file mode 100644 index 0000000..d896250 Binary files /dev/null and b/trunk/etherpad/src/static/img/jun09/pad/padtop4.gif differ diff --git a/trunk/etherpad/src/static/img/jun09/pad/padtop4.png b/trunk/etherpad/src/static/img/jun09/pad/padtop4.png new file mode 100644 index 0000000..11c4595 Binary files /dev/null and b/trunk/etherpad/src/static/img/jun09/pad/padtop4.png differ diff --git a/trunk/etherpad/src/static/img/jun09/pad/padtop4.xcf b/trunk/etherpad/src/static/img/jun09/pad/padtop4.xcf new file mode 100644 index 0000000..1e735aa Binary files /dev/null and b/trunk/etherpad/src/static/img/jun09/pad/padtop4.xcf differ diff --git a/trunk/etherpad/src/static/img/jun09/pad/padtop5.png b/trunk/etherpad/src/static/img/jun09/pad/padtop5.png new file mode 100644 index 0000000..6546509 Binary files /dev/null and b/trunk/etherpad/src/static/img/jun09/pad/padtop5.png differ diff --git a/trunk/etherpad/src/static/img/jun09/pad/padtop5.xcf b/trunk/etherpad/src/static/img/jun09/pad/padtop5.xcf new file mode 100644 index 0000000..4abbd02 Binary files /dev/null and b/trunk/etherpad/src/static/img/jun09/pad/padtop5.xcf differ diff --git a/trunk/etherpad/src/static/img/jun09/pad/padtopback.gif b/trunk/etherpad/src/static/img/jun09/pad/padtopback.gif new file mode 100644 index 0000000..335979b Binary files /dev/null and b/trunk/etherpad/src/static/img/jun09/pad/padtopback.gif differ diff --git a/trunk/etherpad/src/static/img/jun09/pad/padtopback2.gif b/trunk/etherpad/src/static/img/jun09/pad/padtopback2.gif new file mode 100644 index 0000000..eb92358 Binary files /dev/null and b/trunk/etherpad/src/static/img/jun09/pad/padtopback2.gif differ diff --git a/trunk/etherpad/src/static/img/jun09/pad/protop.png b/trunk/etherpad/src/static/img/jun09/pad/protop.png new file mode 100644 index 0000000..740d903 Binary files /dev/null and b/trunk/etherpad/src/static/img/jun09/pad/protop.png differ diff --git a/trunk/etherpad/src/static/img/jun09/pad/protop.xcf b/trunk/etherpad/src/static/img/jun09/pad/protop.xcf new file mode 100644 index 0000000..4f3abfd Binary files /dev/null and b/trunk/etherpad/src/static/img/jun09/pad/protop.xcf differ diff --git a/trunk/etherpad/src/static/img/jun09/pad/public.gif b/trunk/etherpad/src/static/img/jun09/pad/public.gif new file mode 100644 index 0000000..e6f09c7 Binary files /dev/null and b/trunk/etherpad/src/static/img/jun09/pad/public.gif differ diff --git a/trunk/etherpad/src/static/img/jun09/pad/savedrevarrows.gif b/trunk/etherpad/src/static/img/jun09/pad/savedrevarrows.gif new file mode 100644 index 0000000..2aa2e41 Binary files /dev/null and b/trunk/etherpad/src/static/img/jun09/pad/savedrevarrows.gif differ diff --git a/trunk/etherpad/src/static/img/jun09/pad/savedrevsgfx2.gif b/trunk/etherpad/src/static/img/jun09/pad/savedrevsgfx2.gif new file mode 100644 index 0000000..45c3459 Binary files /dev/null and b/trunk/etherpad/src/static/img/jun09/pad/savedrevsgfx2.gif differ diff --git a/trunk/etherpad/src/static/img/jun09/pad/sharebox2.gif b/trunk/etherpad/src/static/img/jun09/pad/sharebox2.gif new file mode 100644 index 0000000..8e89925 Binary files /dev/null and b/trunk/etherpad/src/static/img/jun09/pad/sharebox2.gif differ diff --git a/trunk/etherpad/src/static/img/jun09/pad/sharebox3.gif b/trunk/etherpad/src/static/img/jun09/pad/sharebox3.gif new file mode 100644 index 0000000..6f8f03c Binary files /dev/null and b/trunk/etherpad/src/static/img/jun09/pad/sharebox3.gif differ diff --git a/trunk/etherpad/src/static/img/jun09/pad/sharebox4.gif b/trunk/etherpad/src/static/img/jun09/pad/sharebox4.gif new file mode 100644 index 0000000..eccaa7e Binary files /dev/null and b/trunk/etherpad/src/static/img/jun09/pad/sharebox4.gif differ diff --git a/trunk/etherpad/src/static/img/jun09/pad/sharedistri.gif b/trunk/etherpad/src/static/img/jun09/pad/sharedistri.gif new file mode 100644 index 0000000..8eb5891 Binary files /dev/null and b/trunk/etherpad/src/static/img/jun09/pad/sharedistri.gif differ diff --git a/trunk/etherpad/src/static/img/jun09/pad/syncdone.gif b/trunk/etherpad/src/static/img/jun09/pad/syncdone.gif new file mode 100644 index 0000000..e4d971b Binary files /dev/null and b/trunk/etherpad/src/static/img/jun09/pad/syncdone.gif differ diff --git a/trunk/etherpad/src/static/img/jun09/pad/syncing.gif b/trunk/etherpad/src/static/img/jun09/pad/syncing.gif new file mode 100644 index 0000000..bbc731f Binary files /dev/null and b/trunk/etherpad/src/static/img/jun09/pad/syncing.gif differ diff --git a/trunk/etherpad/src/static/img/jun09/pad/syncing2.gif b/trunk/etherpad/src/static/img/jun09/pad/syncing2.gif new file mode 100644 index 0000000..29470e3 Binary files /dev/null and b/trunk/etherpad/src/static/img/jun09/pad/syncing2.gif differ diff --git a/trunk/etherpad/src/static/img/jun09/pad/viewbargfx.gif b/trunk/etherpad/src/static/img/jun09/pad/viewbargfx.gif new file mode 100644 index 0000000..396483a Binary files /dev/null and b/trunk/etherpad/src/static/img/jun09/pad/viewbargfx.gif differ diff --git a/trunk/etherpad/src/static/img/lib/jquery.contextmenu.images/cmenu-gloss-cyan-menu-item-hover.gif b/trunk/etherpad/src/static/img/lib/jquery.contextmenu.images/cmenu-gloss-cyan-menu-item-hover.gif new file mode 100644 index 0000000..d0e428e Binary files /dev/null and b/trunk/etherpad/src/static/img/lib/jquery.contextmenu.images/cmenu-gloss-cyan-menu-item-hover.gif differ diff --git a/trunk/etherpad/src/static/img/lib/jquery.contextmenu.images/cmenu-gloss-menu-item-hover.gif b/trunk/etherpad/src/static/img/lib/jquery.contextmenu.images/cmenu-gloss-menu-item-hover.gif new file mode 100644 index 0000000..8240ba3 Binary files /dev/null and b/trunk/etherpad/src/static/img/lib/jquery.contextmenu.images/cmenu-gloss-menu-item-hover.gif differ diff --git a/trunk/etherpad/src/static/img/lib/jquery.contextmenu.images/cmenu-gloss-semitransparent-menu-item-hover.png b/trunk/etherpad/src/static/img/lib/jquery.contextmenu.images/cmenu-gloss-semitransparent-menu-item-hover.png new file mode 100644 index 0000000..6314d53 Binary files /dev/null and b/trunk/etherpad/src/static/img/lib/jquery.contextmenu.images/cmenu-gloss-semitransparent-menu-item-hover.png differ diff --git a/trunk/etherpad/src/static/img/lib/jquery.contextmenu.images/cmenu-human-menu-item-hover.gif b/trunk/etherpad/src/static/img/lib/jquery.contextmenu.images/cmenu-human-menu-item-hover.gif new file mode 100644 index 0000000..7e70aae Binary files /dev/null and b/trunk/etherpad/src/static/img/lib/jquery.contextmenu.images/cmenu-human-menu-item-hover.gif differ diff --git a/trunk/etherpad/src/static/img/lib/jquery.contextmenu.images/cmenu-osx-menu-item-hover.gif b/trunk/etherpad/src/static/img/lib/jquery.contextmenu.images/cmenu-osx-menu-item-hover.gif new file mode 100644 index 0000000..aa802e0 Binary files /dev/null and b/trunk/etherpad/src/static/img/lib/jquery.contextmenu.images/cmenu-osx-menu-item-hover.gif differ diff --git a/trunk/etherpad/src/static/img/lib/jquery.contextmenu.images/cmenu-vista-bg.gif b/trunk/etherpad/src/static/img/lib/jquery.contextmenu.images/cmenu-vista-bg.gif new file mode 100644 index 0000000..565e771 Binary files /dev/null and b/trunk/etherpad/src/static/img/lib/jquery.contextmenu.images/cmenu-vista-bg.gif differ diff --git a/trunk/etherpad/src/static/img/lib/jquery.contextmenu.images/cmenu-vista-menu-item-hover.gif b/trunk/etherpad/src/static/img/lib/jquery.contextmenu.images/cmenu-vista-menu-item-hover.gif new file mode 100644 index 0000000..2825eb1 Binary files /dev/null and b/trunk/etherpad/src/static/img/lib/jquery.contextmenu.images/cmenu-vista-menu-item-hover.gif differ diff --git a/trunk/etherpad/src/static/img/lib/jquery.contextmenu.images/cmenu-xp-bg.gif b/trunk/etherpad/src/static/img/lib/jquery.contextmenu.images/cmenu-xp-bg.gif new file mode 100644 index 0000000..11b238c Binary files /dev/null and b/trunk/etherpad/src/static/img/lib/jquery.contextmenu.images/cmenu-xp-bg.gif differ diff --git a/trunk/etherpad/src/static/img/may09/bold.gif b/trunk/etherpad/src/static/img/may09/bold.gif new file mode 100644 index 0000000..49e0d17 Binary files /dev/null and b/trunk/etherpad/src/static/img/may09/bold.gif differ diff --git a/trunk/etherpad/src/static/img/may09/doc.gif b/trunk/etherpad/src/static/img/may09/doc.gif new file mode 100644 index 0000000..2b62080 Binary files /dev/null and b/trunk/etherpad/src/static/img/may09/doc.gif differ diff --git a/trunk/etherpad/src/static/img/may09/doc.png b/trunk/etherpad/src/static/img/may09/doc.png new file mode 100644 index 0000000..b374d0d Binary files /dev/null and b/trunk/etherpad/src/static/img/may09/doc.png differ diff --git a/trunk/etherpad/src/static/img/may09/html.gif b/trunk/etherpad/src/static/img/may09/html.gif new file mode 100644 index 0000000..f7837e5 Binary files /dev/null and b/trunk/etherpad/src/static/img/may09/html.gif differ diff --git a/trunk/etherpad/src/static/img/may09/html.png b/trunk/etherpad/src/static/img/may09/html.png new file mode 100644 index 0000000..917f1a4 Binary files /dev/null and b/trunk/etherpad/src/static/img/may09/html.png differ diff --git a/trunk/etherpad/src/static/img/may09/italic.gif b/trunk/etherpad/src/static/img/may09/italic.gif new file mode 100644 index 0000000..2876ed9 Binary files /dev/null and b/trunk/etherpad/src/static/img/may09/italic.gif differ diff --git a/trunk/etherpad/src/static/img/may09/leftarrow.gif b/trunk/etherpad/src/static/img/may09/leftarrow.gif new file mode 100644 index 0000000..c26475f Binary files /dev/null and b/trunk/etherpad/src/static/img/may09/leftarrow.gif differ diff --git a/trunk/etherpad/src/static/img/may09/leftarrow2.gif b/trunk/etherpad/src/static/img/may09/leftarrow2.gif new file mode 100644 index 0000000..63bbddc Binary files /dev/null and b/trunk/etherpad/src/static/img/may09/leftarrow2.gif differ diff --git a/trunk/etherpad/src/static/img/may09/link.gif b/trunk/etherpad/src/static/img/may09/link.gif new file mode 100644 index 0000000..44ffdd2 Binary files /dev/null and b/trunk/etherpad/src/static/img/may09/link.gif differ diff --git a/trunk/etherpad/src/static/img/may09/link.png b/trunk/etherpad/src/static/img/may09/link.png new file mode 100644 index 0000000..4e46fcb Binary files /dev/null and b/trunk/etherpad/src/static/img/may09/link.png differ diff --git a/trunk/etherpad/src/static/img/may09/odt.gif b/trunk/etherpad/src/static/img/may09/odt.gif new file mode 100644 index 0000000..be42352 Binary files /dev/null and b/trunk/etherpad/src/static/img/may09/odt.gif differ diff --git a/trunk/etherpad/src/static/img/may09/odt.png b/trunk/etherpad/src/static/img/may09/odt.png new file mode 100644 index 0000000..5d630db Binary files /dev/null and b/trunk/etherpad/src/static/img/may09/odt.png differ diff --git a/trunk/etherpad/src/static/img/may09/padlock.gif b/trunk/etherpad/src/static/img/may09/padlock.gif new file mode 100644 index 0000000..167bf75 Binary files /dev/null and b/trunk/etherpad/src/static/img/may09/padlock.gif differ diff --git a/trunk/etherpad/src/static/img/may09/padlockopen.gif b/trunk/etherpad/src/static/img/may09/padlockopen.gif new file mode 100644 index 0000000..0aaf413 Binary files /dev/null and b/trunk/etherpad/src/static/img/may09/padlockopen.gif differ diff --git a/trunk/etherpad/src/static/img/may09/passwordlocked.gif b/trunk/etherpad/src/static/img/may09/passwordlocked.gif new file mode 100644 index 0000000..167bf75 Binary files /dev/null and b/trunk/etherpad/src/static/img/may09/passwordlocked.gif differ diff --git a/trunk/etherpad/src/static/img/may09/passwordlocked_cropped.gif b/trunk/etherpad/src/static/img/may09/passwordlocked_cropped.gif new file mode 100644 index 0000000..969a8bd Binary files /dev/null and b/trunk/etherpad/src/static/img/may09/passwordlocked_cropped.gif differ diff --git a/trunk/etherpad/src/static/img/may09/passwordnone.gif b/trunk/etherpad/src/static/img/may09/passwordnone.gif new file mode 100644 index 0000000..61e38d9 Binary files /dev/null and b/trunk/etherpad/src/static/img/may09/passwordnone.gif differ diff --git a/trunk/etherpad/src/static/img/may09/paypal.gif b/trunk/etherpad/src/static/img/may09/paypal.gif new file mode 100644 index 0000000..add5454 Binary files /dev/null and b/trunk/etherpad/src/static/img/may09/paypal.gif differ diff --git a/trunk/etherpad/src/static/img/may09/pdf.gif b/trunk/etherpad/src/static/img/may09/pdf.gif new file mode 100644 index 0000000..1614d2c Binary files /dev/null and b/trunk/etherpad/src/static/img/may09/pdf.gif differ diff --git a/trunk/etherpad/src/static/img/may09/pdf.png b/trunk/etherpad/src/static/img/may09/pdf.png new file mode 100644 index 0000000..ac4fa75 Binary files /dev/null and b/trunk/etherpad/src/static/img/may09/pdf.png differ diff --git a/trunk/etherpad/src/static/img/may09/redo.gif b/trunk/etherpad/src/static/img/may09/redo.gif new file mode 100644 index 0000000..bb07b8e Binary files /dev/null and b/trunk/etherpad/src/static/img/may09/redo.gif differ diff --git a/trunk/etherpad/src/static/img/may09/txt.gif b/trunk/etherpad/src/static/img/may09/txt.gif new file mode 100644 index 0000000..c3f026e Binary files /dev/null and b/trunk/etherpad/src/static/img/may09/txt.gif differ diff --git a/trunk/etherpad/src/static/img/may09/txt.png b/trunk/etherpad/src/static/img/may09/txt.png new file mode 100644 index 0000000..f830cc6 Binary files /dev/null and b/trunk/etherpad/src/static/img/may09/txt.png differ diff --git a/trunk/etherpad/src/static/img/may09/underline.gif b/trunk/etherpad/src/static/img/may09/underline.gif new file mode 100644 index 0000000..1d1f573 Binary files /dev/null and b/trunk/etherpad/src/static/img/may09/underline.gif differ diff --git a/trunk/etherpad/src/static/img/may09/undo.gif b/trunk/etherpad/src/static/img/may09/undo.gif new file mode 100644 index 0000000..273e9e6 Binary files /dev/null and b/trunk/etherpad/src/static/img/may09/undo.gif differ diff --git a/trunk/etherpad/src/static/img/miniplane.gif b/trunk/etherpad/src/static/img/miniplane.gif new file mode 100644 index 0000000..aeaacb0 Binary files /dev/null and b/trunk/etherpad/src/static/img/miniplane.gif differ diff --git a/trunk/etherpad/src/static/img/misc/diagnostic-links.gif b/trunk/etherpad/src/static/img/misc/diagnostic-links.gif new file mode 100644 index 0000000..f76669a Binary files /dev/null and b/trunk/etherpad/src/static/img/misc/diagnostic-links.gif differ diff --git a/trunk/etherpad/src/static/img/misc/status-ball.gif b/trunk/etherpad/src/static/img/misc/status-ball.gif new file mode 100644 index 0000000..085ccae Binary files /dev/null and b/trunk/etherpad/src/static/img/misc/status-ball.gif differ diff --git a/trunk/etherpad/src/static/img/misc/traclogo.gif b/trunk/etherpad/src/static/img/misc/traclogo.gif new file mode 100644 index 0000000..7ee31d1 Binary files /dev/null and b/trunk/etherpad/src/static/img/misc/traclogo.gif differ diff --git a/trunk/etherpad/src/static/img/oct/atlonglast.gif b/trunk/etherpad/src/static/img/oct/atlonglast.gif new file mode 100644 index 0000000..88e1c98 Binary files /dev/null and b/trunk/etherpad/src/static/img/oct/atlonglast.gif differ diff --git a/trunk/etherpad/src/static/img/oct/banner1.jpg b/trunk/etherpad/src/static/img/oct/banner1.jpg new file mode 100644 index 0000000..431d2ba Binary files /dev/null and b/trunk/etherpad/src/static/img/oct/banner1.jpg differ diff --git a/trunk/etherpad/src/static/img/oct/banner2.jpg b/trunk/etherpad/src/static/img/oct/banner2.jpg new file mode 100644 index 0000000..50570a8 Binary files /dev/null and b/trunk/etherpad/src/static/img/oct/banner2.jpg differ diff --git a/trunk/etherpad/src/static/img/oct/banner3.jpg b/trunk/etherpad/src/static/img/oct/banner3.jpg new file mode 100644 index 0000000..c0260a3 Binary files /dev/null and b/trunk/etherpad/src/static/img/oct/banner3.jpg differ diff --git a/trunk/etherpad/src/static/img/oct/banner4.jpg b/trunk/etherpad/src/static/img/oct/banner4.jpg new file mode 100644 index 0000000..e1593b7 Binary files /dev/null and b/trunk/etherpad/src/static/img/oct/banner4.jpg differ diff --git a/trunk/etherpad/src/static/img/oct/banner5.gif b/trunk/etherpad/src/static/img/oct/banner5.gif new file mode 100644 index 0000000..82c8eee Binary files /dev/null and b/trunk/etherpad/src/static/img/oct/banner5.gif differ diff --git a/trunk/etherpad/src/static/img/oct/banner6.gif b/trunk/etherpad/src/static/img/oct/banner6.gif new file mode 100644 index 0000000..9016ed8 Binary files /dev/null and b/trunk/etherpad/src/static/img/oct/banner6.gif differ diff --git a/trunk/etherpad/src/static/img/oct/banner7.gif b/trunk/etherpad/src/static/img/oct/banner7.gif new file mode 100644 index 0000000..a999f93 Binary files /dev/null and b/trunk/etherpad/src/static/img/oct/banner7.gif differ diff --git a/trunk/etherpad/src/static/img/oct/banner8.gif b/trunk/etherpad/src/static/img/oct/banner8.gif new file mode 100644 index 0000000..cc2c436 Binary files /dev/null and b/trunk/etherpad/src/static/img/oct/banner8.gif differ diff --git a/trunk/etherpad/src/static/img/oct/banner9.gif b/trunk/etherpad/src/static/img/oct/banner9.gif new file mode 100644 index 0000000..e7d9043 Binary files /dev/null and b/trunk/etherpad/src/static/img/oct/banner9.gif differ diff --git a/trunk/etherpad/src/static/img/oct/bannerback5.gif b/trunk/etherpad/src/static/img/oct/bannerback5.gif new file mode 100644 index 0000000..d748357 Binary files /dev/null and b/trunk/etherpad/src/static/img/oct/bannerback5.gif differ diff --git a/trunk/etherpad/src/static/img/oct/bannerback6.gif b/trunk/etherpad/src/static/img/oct/bannerback6.gif new file mode 100644 index 0000000..416314f Binary files /dev/null and b/trunk/etherpad/src/static/img/oct/bannerback6.gif differ diff --git a/trunk/etherpad/src/static/img/oct/bodyback1.gif b/trunk/etherpad/src/static/img/oct/bodyback1.gif new file mode 100644 index 0000000..39d3fd7 Binary files /dev/null and b/trunk/etherpad/src/static/img/oct/bodyback1.gif differ diff --git a/trunk/etherpad/src/static/img/oct/bodyback2.gif b/trunk/etherpad/src/static/img/oct/bodyback2.gif new file mode 100644 index 0000000..5bbdad8 Binary files /dev/null and b/trunk/etherpad/src/static/img/oct/bodyback2.gif differ diff --git a/trunk/etherpad/src/static/img/oct/bodyback3.gif b/trunk/etherpad/src/static/img/oct/bodyback3.gif new file mode 100644 index 0000000..a04faf4 Binary files /dev/null and b/trunk/etherpad/src/static/img/oct/bodyback3.gif differ diff --git a/trunk/etherpad/src/static/img/oct/bodyback4.gif b/trunk/etherpad/src/static/img/oct/bodyback4.gif new file mode 100644 index 0000000..a875cd6 Binary files /dev/null and b/trunk/etherpad/src/static/img/oct/bodyback4.gif differ diff --git a/trunk/etherpad/src/static/img/oct/bodyback5.gif b/trunk/etherpad/src/static/img/oct/bodyback5.gif new file mode 100644 index 0000000..66f67ce Binary files /dev/null and b/trunk/etherpad/src/static/img/oct/bodyback5.gif differ diff --git a/trunk/etherpad/src/static/img/oct/bodybacktop1.gif b/trunk/etherpad/src/static/img/oct/bodybacktop1.gif new file mode 100644 index 0000000..20a9261 Binary files /dev/null and b/trunk/etherpad/src/static/img/oct/bodybacktop1.gif differ diff --git a/trunk/etherpad/src/static/img/oct/computers.gif b/trunk/etherpad/src/static/img/oct/computers.gif new file mode 100644 index 0000000..c8f2aff Binary files /dev/null and b/trunk/etherpad/src/static/img/oct/computers.gif differ diff --git a/trunk/etherpad/src/static/img/oct/computers2.gif b/trunk/etherpad/src/static/img/oct/computers2.gif new file mode 100644 index 0000000..bd8d133 Binary files /dev/null and b/trunk/etherpad/src/static/img/oct/computers2.gif differ diff --git a/trunk/etherpad/src/static/img/oct/glossyblue.gif b/trunk/etherpad/src/static/img/oct/glossyblue.gif new file mode 100644 index 0000000..eed77e7 Binary files /dev/null and b/trunk/etherpad/src/static/img/oct/glossyblue.gif differ diff --git a/trunk/etherpad/src/static/img/oct/glossyblue2.gif b/trunk/etherpad/src/static/img/oct/glossyblue2.gif new file mode 100644 index 0000000..c323ebb Binary files /dev/null and b/trunk/etherpad/src/static/img/oct/glossyblue2.gif differ diff --git a/trunk/etherpad/src/static/img/oct/glossyblueh.gif b/trunk/etherpad/src/static/img/oct/glossyblueh.gif new file mode 100644 index 0000000..e56ceeb Binary files /dev/null and b/trunk/etherpad/src/static/img/oct/glossyblueh.gif differ diff --git a/trunk/etherpad/src/static/img/oct/insetrect.gif b/trunk/etherpad/src/static/img/oct/insetrect.gif new file mode 100644 index 0000000..1d8124d Binary files /dev/null and b/trunk/etherpad/src/static/img/oct/insetrect.gif differ diff --git a/trunk/etherpad/src/static/img/oct/minilogo1-05e.gif b/trunk/etherpad/src/static/img/oct/minilogo1-05e.gif new file mode 100644 index 0000000..a09ef16 Binary files /dev/null and b/trunk/etherpad/src/static/img/oct/minilogo1-05e.gif differ diff --git a/trunk/etherpad/src/static/img/oct/minilogo1-07f.gif b/trunk/etherpad/src/static/img/oct/minilogo1-07f.gif new file mode 100644 index 0000000..8565272 Binary files /dev/null and b/trunk/etherpad/src/static/img/oct/minilogo1-07f.gif differ diff --git a/trunk/etherpad/src/static/img/oct/minilogo3.jpg b/trunk/etherpad/src/static/img/oct/minilogo3.jpg new file mode 100644 index 0000000..d0cd89b Binary files /dev/null and b/trunk/etherpad/src/static/img/oct/minilogo3.jpg differ diff --git a/trunk/etherpad/src/static/img/oct/minitopback1.gif b/trunk/etherpad/src/static/img/oct/minitopback1.gif new file mode 100644 index 0000000..da8f575 Binary files /dev/null and b/trunk/etherpad/src/static/img/oct/minitopback1.gif differ diff --git a/trunk/etherpad/src/static/img/oct/minitopback2.gif b/trunk/etherpad/src/static/img/oct/minitopback2.gif new file mode 100644 index 0000000..a1f43ab Binary files /dev/null and b/trunk/etherpad/src/static/img/oct/minitopback2.gif differ diff --git a/trunk/etherpad/src/static/img/oct/minitopbar1-05e.gif b/trunk/etherpad/src/static/img/oct/minitopbar1-05e.gif new file mode 100644 index 0000000..1115749 Binary files /dev/null and b/trunk/etherpad/src/static/img/oct/minitopbar1-05e.gif differ diff --git a/trunk/etherpad/src/static/img/oct/minitopbar2-05e.gif b/trunk/etherpad/src/static/img/oct/minitopbar2-05e.gif new file mode 100644 index 0000000..2c5d10f Binary files /dev/null and b/trunk/etherpad/src/static/img/oct/minitopbar2-05e.gif differ diff --git a/trunk/etherpad/src/static/img/oct/minitopbar2-07f.gif b/trunk/etherpad/src/static/img/oct/minitopbar2-07f.gif new file mode 100644 index 0000000..5687aed Binary files /dev/null and b/trunk/etherpad/src/static/img/oct/minitopbar2-07f.gif differ diff --git a/trunk/etherpad/src/static/img/oct/minitopbar3.jpg b/trunk/etherpad/src/static/img/oct/minitopbar3.jpg new file mode 100644 index 0000000..d0cd89b Binary files /dev/null and b/trunk/etherpad/src/static/img/oct/minitopbar3.jpg differ diff --git a/trunk/etherpad/src/static/img/oct/minitopbar4.gif b/trunk/etherpad/src/static/img/oct/minitopbar4.gif new file mode 100644 index 0000000..bf7aec9 Binary files /dev/null and b/trunk/etherpad/src/static/img/oct/minitopbar4.gif differ diff --git a/trunk/etherpad/src/static/img/oct/minitoplogo1.gif b/trunk/etherpad/src/static/img/oct/minitoplogo1.gif new file mode 100644 index 0000000..6317c0f Binary files /dev/null and b/trunk/etherpad/src/static/img/oct/minitoplogo1.gif differ diff --git a/trunk/etherpad/src/static/img/oct/minitoplogo2.gif b/trunk/etherpad/src/static/img/oct/minitoplogo2.gif new file mode 100644 index 0000000..bbb5e21 Binary files /dev/null and b/trunk/etherpad/src/static/img/oct/minitoplogo2.gif differ diff --git a/trunk/etherpad/src/static/img/oct/newpadmain.gif b/trunk/etherpad/src/static/img/oct/newpadmain.gif new file mode 100644 index 0000000..6427037 Binary files /dev/null and b/trunk/etherpad/src/static/img/oct/newpadmain.gif differ diff --git a/trunk/etherpad/src/static/img/oct/newpadmainback.gif b/trunk/etherpad/src/static/img/oct/newpadmainback.gif new file mode 100644 index 0000000..2016864 Binary files /dev/null and b/trunk/etherpad/src/static/img/oct/newpadmainback.gif differ diff --git a/trunk/etherpad/src/static/img/oct/newpadmainbackh.gif b/trunk/etherpad/src/static/img/oct/newpadmainbackh.gif new file mode 100644 index 0000000..3060634 Binary files /dev/null and b/trunk/etherpad/src/static/img/oct/newpadmainbackh.gif differ diff --git a/trunk/etherpad/src/static/img/oct/pageshot.png b/trunk/etherpad/src/static/img/oct/pageshot.png new file mode 100644 index 0000000..cb86428 Binary files /dev/null and b/trunk/etherpad/src/static/img/oct/pageshot.png differ diff --git a/trunk/etherpad/src/static/img/oct/pageshotmini.png b/trunk/etherpad/src/static/img/oct/pageshotmini.png new file mode 100644 index 0000000..0f8a9d0 Binary files /dev/null and b/trunk/etherpad/src/static/img/oct/pageshotmini.png differ diff --git a/trunk/etherpad/src/static/img/oct/sidehead-gradhilite.gif b/trunk/etherpad/src/static/img/oct/sidehead-gradhilite.gif new file mode 100644 index 0000000..5469d87 Binary files /dev/null and b/trunk/etherpad/src/static/img/oct/sidehead-gradhilite.gif differ diff --git a/trunk/etherpad/src/static/img/oct/tinytriangle.gif b/trunk/etherpad/src/static/img/oct/tinytriangle.gif new file mode 100644 index 0000000..1821e3b Binary files /dev/null and b/trunk/etherpad/src/static/img/oct/tinytriangle.gif differ diff --git a/trunk/etherpad/src/static/img/oct/topnav1.gif b/trunk/etherpad/src/static/img/oct/topnav1.gif new file mode 100644 index 0000000..d801c59 Binary files /dev/null and b/trunk/etherpad/src/static/img/oct/topnav1.gif differ diff --git a/trunk/etherpad/src/static/img/oct/topnav2.gif b/trunk/etherpad/src/static/img/oct/topnav2.gif new file mode 100644 index 0000000..c1ab5c5 Binary files /dev/null and b/trunk/etherpad/src/static/img/oct/topnav2.gif differ diff --git a/trunk/etherpad/src/static/img/oct/topnav3.gif b/trunk/etherpad/src/static/img/oct/topnav3.gif new file mode 100644 index 0000000..fa25e75 Binary files /dev/null and b/trunk/etherpad/src/static/img/oct/topnav3.gif differ diff --git a/trunk/etherpad/src/static/img/oct/topnav4.gif b/trunk/etherpad/src/static/img/oct/topnav4.gif new file mode 100644 index 0000000..1f4c714 Binary files /dev/null and b/trunk/etherpad/src/static/img/oct/topnav4.gif differ diff --git a/trunk/etherpad/src/static/img/oct/topnav5.gif b/trunk/etherpad/src/static/img/oct/topnav5.gif new file mode 100644 index 0000000..fa8b737 Binary files /dev/null and b/trunk/etherpad/src/static/img/oct/topnav5.gif differ diff --git a/trunk/etherpad/src/static/img/oct/topnav6.gif b/trunk/etherpad/src/static/img/oct/topnav6.gif new file mode 100644 index 0000000..e0e6815 Binary files /dev/null and b/trunk/etherpad/src/static/img/oct/topnav6.gif differ diff --git a/trunk/etherpad/src/static/img/oct/topnavback1.gif b/trunk/etherpad/src/static/img/oct/topnavback1.gif new file mode 100644 index 0000000..55103a3 Binary files /dev/null and b/trunk/etherpad/src/static/img/oct/topnavback1.gif differ diff --git a/trunk/etherpad/src/static/img/oct/topnavback2.gif b/trunk/etherpad/src/static/img/oct/topnavback2.gif new file mode 100644 index 0000000..9b4bdca Binary files /dev/null and b/trunk/etherpad/src/static/img/oct/topnavback2.gif differ diff --git a/trunk/etherpad/src/static/img/oct/topnavback3.gif b/trunk/etherpad/src/static/img/oct/topnavback3.gif new file mode 100644 index 0000000..327cba1 Binary files /dev/null and b/trunk/etherpad/src/static/img/oct/topnavback3.gif differ diff --git a/trunk/etherpad/src/static/img/oct/usecasesnavdown.gif b/trunk/etherpad/src/static/img/oct/usecasesnavdown.gif new file mode 100644 index 0000000..c8fc7df Binary files /dev/null and b/trunk/etherpad/src/static/img/oct/usecasesnavdown.gif differ diff --git a/trunk/etherpad/src/static/img/oct/usecasesnavdownh.gif b/trunk/etherpad/src/static/img/oct/usecasesnavdownh.gif new file mode 100644 index 0000000..e1fa3a5 Binary files /dev/null and b/trunk/etherpad/src/static/img/oct/usecasesnavdownh.gif differ diff --git a/trunk/etherpad/src/static/img/oct/usecasesnavup.gif b/trunk/etherpad/src/static/img/oct/usecasesnavup.gif new file mode 100644 index 0000000..470dcbe Binary files /dev/null and b/trunk/etherpad/src/static/img/oct/usecasesnavup.gif differ diff --git a/trunk/etherpad/src/static/img/oct/usecasesnavuph.gif b/trunk/etherpad/src/static/img/oct/usecasesnavuph.gif new file mode 100644 index 0000000..4207386 Binary files /dev/null and b/trunk/etherpad/src/static/img/oct/usecasesnavuph.gif differ diff --git a/trunk/etherpad/src/static/img/oct/watchscreencast.gif b/trunk/etherpad/src/static/img/oct/watchscreencast.gif new file mode 100644 index 0000000..f52ed17 Binary files /dev/null and b/trunk/etherpad/src/static/img/oct/watchscreencast.gif differ diff --git a/trunk/etherpad/src/static/img/pad/animated-orb-orange-12.gif b/trunk/etherpad/src/static/img/pad/animated-orb-orange-12.gif new file mode 100644 index 0000000..9db02c6 Binary files /dev/null and b/trunk/etherpad/src/static/img/pad/animated-orb-orange-12.gif differ diff --git a/trunk/etherpad/src/static/img/pad/backgrad.png b/trunk/etherpad/src/static/img/pad/backgrad.png new file mode 100644 index 0000000..d85f73c Binary files /dev/null and b/trunk/etherpad/src/static/img/pad/backgrad.png differ diff --git a/trunk/etherpad/src/static/img/pad/backshadow/backshadow-940-20-eee-20.gif b/trunk/etherpad/src/static/img/pad/backshadow/backshadow-940-20-eee-20.gif new file mode 100644 index 0000000..bc3088b Binary files /dev/null and b/trunk/etherpad/src/static/img/pad/backshadow/backshadow-940-20-eee-20.gif differ diff --git a/trunk/etherpad/src/static/img/pad/backshadow/backshadow-940-20-fff-20.gif b/trunk/etherpad/src/static/img/pad/backshadow/backshadow-940-20-fff-20.gif new file mode 100644 index 0000000..8a87283 Binary files /dev/null and b/trunk/etherpad/src/static/img/pad/backshadow/backshadow-940-20-fff-20.gif differ diff --git a/trunk/etherpad/src/static/img/pad/backshadow/backshadow-940-20-fff-40.gif b/trunk/etherpad/src/static/img/pad/backshadow/backshadow-940-20-fff-40.gif new file mode 100644 index 0000000..695ecbe Binary files /dev/null and b/trunk/etherpad/src/static/img/pad/backshadow/backshadow-940-20-fff-40.gif differ diff --git a/trunk/etherpad/src/static/img/pad/backshadow/backshadow-940-20-fff-60.gif b/trunk/etherpad/src/static/img/pad/backshadow/backshadow-940-20-fff-60.gif new file mode 100644 index 0000000..0005405 Binary files /dev/null and b/trunk/etherpad/src/static/img/pad/backshadow/backshadow-940-20-fff-60.gif differ diff --git a/trunk/etherpad/src/static/img/pad/backshadow/botshadow-940-20-eee-20.gif b/trunk/etherpad/src/static/img/pad/backshadow/botshadow-940-20-eee-20.gif new file mode 100644 index 0000000..92fb5dc Binary files /dev/null and b/trunk/etherpad/src/static/img/pad/backshadow/botshadow-940-20-eee-20.gif differ diff --git a/trunk/etherpad/src/static/img/pad/etherpad-logo-small-grad.gif b/trunk/etherpad/src/static/img/pad/etherpad-logo-small-grad.gif new file mode 100644 index 0000000..a65aa15 Binary files /dev/null and b/trunk/etherpad/src/static/img/pad/etherpad-logo-small-grad.gif differ diff --git a/trunk/etherpad/src/static/img/pad/etherpad-logo-small.gif b/trunk/etherpad/src/static/img/pad/etherpad-logo-small.gif new file mode 100644 index 0000000..6669f39 Binary files /dev/null and b/trunk/etherpad/src/static/img/pad/etherpad-logo-small.gif differ diff --git a/trunk/etherpad/src/static/img/pad/etherpad-logo-small2.gif b/trunk/etherpad/src/static/img/pad/etherpad-logo-small2.gif new file mode 100644 index 0000000..6e33392 Binary files /dev/null and b/trunk/etherpad/src/static/img/pad/etherpad-logo-small2.gif differ diff --git a/trunk/etherpad/src/static/img/pad/expandy-arrow-down.gif b/trunk/etherpad/src/static/img/pad/expandy-arrow-down.gif new file mode 100644 index 0000000..4b67c17 Binary files /dev/null and b/trunk/etherpad/src/static/img/pad/expandy-arrow-down.gif differ diff --git a/trunk/etherpad/src/static/img/pad/expandy-arrow-right.gif b/trunk/etherpad/src/static/img/pad/expandy-arrow-right.gif new file mode 100644 index 0000000..61303e6 Binary files /dev/null and b/trunk/etherpad/src/static/img/pad/expandy-arrow-right.gif differ diff --git a/trunk/etherpad/src/static/img/pad/expandy-arrow6-down-active.gif b/trunk/etherpad/src/static/img/pad/expandy-arrow6-down-active.gif new file mode 100644 index 0000000..5f530b7 Binary files /dev/null and b/trunk/etherpad/src/static/img/pad/expandy-arrow6-down-active.gif differ diff --git a/trunk/etherpad/src/static/img/pad/expandy-arrow6-down.gif b/trunk/etherpad/src/static/img/pad/expandy-arrow6-down.gif new file mode 100644 index 0000000..42fa9af Binary files /dev/null and b/trunk/etherpad/src/static/img/pad/expandy-arrow6-down.gif differ diff --git a/trunk/etherpad/src/static/img/pad/expandy-arrow6-right-active.gif b/trunk/etherpad/src/static/img/pad/expandy-arrow6-right-active.gif new file mode 100644 index 0000000..4496fad Binary files /dev/null and b/trunk/etherpad/src/static/img/pad/expandy-arrow6-right-active.gif differ diff --git a/trunk/etherpad/src/static/img/pad/expandy-arrow6-right.gif b/trunk/etherpad/src/static/img/pad/expandy-arrow6-right.gif new file mode 100644 index 0000000..9a8274c Binary files /dev/null and b/trunk/etherpad/src/static/img/pad/expandy-arrow6-right.gif differ diff --git a/trunk/etherpad/src/static/img/pad/header-revgrad.gif b/trunk/etherpad/src/static/img/pad/header-revgrad.gif new file mode 100644 index 0000000..e803e2a Binary files /dev/null and b/trunk/etherpad/src/static/img/pad/header-revgrad.gif differ diff --git a/trunk/etherpad/src/static/img/pad/newpad.gif b/trunk/etherpad/src/static/img/pad/newpad.gif new file mode 100644 index 0000000..c631cc4 Binary files /dev/null and b/trunk/etherpad/src/static/img/pad/newpad.gif differ diff --git a/trunk/etherpad/src/static/img/pad/orb-greenred-12.gif b/trunk/etherpad/src/static/img/pad/orb-greenred-12.gif new file mode 100644 index 0000000..d722168 Binary files /dev/null and b/trunk/etherpad/src/static/img/pad/orb-greenred-12.gif differ diff --git a/trunk/etherpad/src/static/img/pad/padbg1.jpg b/trunk/etherpad/src/static/img/pad/padbg1.jpg new file mode 100644 index 0000000..8e640fd Binary files /dev/null and b/trunk/etherpad/src/static/img/pad/padbg1.jpg differ diff --git a/trunk/etherpad/src/static/img/pad/padbg2.jpg b/trunk/etherpad/src/static/img/pad/padbg2.jpg new file mode 100644 index 0000000..1248bc0 Binary files /dev/null and b/trunk/etherpad/src/static/img/pad/padbg2.jpg differ diff --git a/trunk/etherpad/src/static/img/pad/padbg3.jpg b/trunk/etherpad/src/static/img/pad/padbg3.jpg new file mode 100644 index 0000000..99bba32 Binary files /dev/null and b/trunk/etherpad/src/static/img/pad/padbg3.jpg differ diff --git a/trunk/etherpad/src/static/img/pad/padbg4.jpg b/trunk/etherpad/src/static/img/pad/padbg4.jpg new file mode 100644 index 0000000..2497360 Binary files /dev/null and b/trunk/etherpad/src/static/img/pad/padbg4.jpg differ diff --git a/trunk/etherpad/src/static/img/pad/padbg5.jpg b/trunk/etherpad/src/static/img/pad/padbg5.jpg new file mode 100644 index 0000000..bc3953c Binary files /dev/null and b/trunk/etherpad/src/static/img/pad/padbg5.jpg differ diff --git a/trunk/etherpad/src/static/img/pad/padhead1.jpg b/trunk/etherpad/src/static/img/pad/padhead1.jpg new file mode 100644 index 0000000..e263cf4 Binary files /dev/null and b/trunk/etherpad/src/static/img/pad/padhead1.jpg differ diff --git a/trunk/etherpad/src/static/img/pad/padhead2.jpg b/trunk/etherpad/src/static/img/pad/padhead2.jpg new file mode 100644 index 0000000..a2f247d Binary files /dev/null and b/trunk/etherpad/src/static/img/pad/padhead2.jpg differ diff --git a/trunk/etherpad/src/static/img/pad/padhead3.jpg b/trunk/etherpad/src/static/img/pad/padhead3.jpg new file mode 100644 index 0000000..101432f Binary files /dev/null and b/trunk/etherpad/src/static/img/pad/padhead3.jpg differ diff --git a/trunk/etherpad/src/static/img/pad/pencil-icon-small-blue.gif b/trunk/etherpad/src/static/img/pad/pencil-icon-small-blue.gif new file mode 100644 index 0000000..f60b0f2 Binary files /dev/null and b/trunk/etherpad/src/static/img/pad/pencil-icon-small-blue.gif differ diff --git a/trunk/etherpad/src/static/img/pad/sidehead-grad.gif b/trunk/etherpad/src/static/img/pad/sidehead-grad.gif new file mode 100644 index 0000000..32bac92 Binary files /dev/null and b/trunk/etherpad/src/static/img/pad/sidehead-grad.gif differ diff --git a/trunk/etherpad/src/static/img/pad/timeslider/button_depressed.png b/trunk/etherpad/src/static/img/pad/timeslider/button_depressed.png new file mode 100644 index 0000000..1e96692 Binary files /dev/null and b/trunk/etherpad/src/static/img/pad/timeslider/button_depressed.png differ diff --git a/trunk/etherpad/src/static/img/pad/timeslider/button_undepressed.png b/trunk/etherpad/src/static/img/pad/timeslider/button_undepressed.png new file mode 100644 index 0000000..cd2d7a8 Binary files /dev/null and b/trunk/etherpad/src/static/img/pad/timeslider/button_undepressed.png differ diff --git a/trunk/etherpad/src/static/img/pad/timeslider/crushed_button_depressed.png b/trunk/etherpad/src/static/img/pad/timeslider/crushed_button_depressed.png new file mode 100644 index 0000000..d75dcce Binary files /dev/null and b/trunk/etherpad/src/static/img/pad/timeslider/crushed_button_depressed.png differ diff --git a/trunk/etherpad/src/static/img/pad/timeslider/crushed_button_undepressed.png b/trunk/etherpad/src/static/img/pad/timeslider/crushed_button_undepressed.png new file mode 100644 index 0000000..d86e3f3 Binary files /dev/null and b/trunk/etherpad/src/static/img/pad/timeslider/crushed_button_undepressed.png differ diff --git a/trunk/etherpad/src/static/img/pad/timeslider/crushed_current_location.png b/trunk/etherpad/src/static/img/pad/timeslider/crushed_current_location.png new file mode 100644 index 0000000..76e0835 Binary files /dev/null and b/trunk/etherpad/src/static/img/pad/timeslider/crushed_current_location.png differ diff --git a/trunk/etherpad/src/static/img/pad/timeslider/crushed_pause.png b/trunk/etherpad/src/static/img/pad/timeslider/crushed_pause.png new file mode 100644 index 0000000..437b384 Binary files /dev/null and b/trunk/etherpad/src/static/img/pad/timeslider/crushed_pause.png differ diff --git a/trunk/etherpad/src/static/img/pad/timeslider/crushed_play.png b/trunk/etherpad/src/static/img/pad/timeslider/crushed_play.png new file mode 100644 index 0000000..c5b754b Binary files /dev/null and b/trunk/etherpad/src/static/img/pad/timeslider/crushed_play.png differ diff --git a/trunk/etherpad/src/static/img/pad/timeslider/crushed_play_button.png b/trunk/etherpad/src/static/img/pad/timeslider/crushed_play_button.png new file mode 100644 index 0000000..3b112f6 Binary files /dev/null and b/trunk/etherpad/src/static/img/pad/timeslider/crushed_play_button.png differ diff --git a/trunk/etherpad/src/static/img/pad/timeslider/crushed_timeslider_mockup.png b/trunk/etherpad/src/static/img/pad/timeslider/crushed_timeslider_mockup.png new file mode 100644 index 0000000..f4ccbf1 Binary files /dev/null and b/trunk/etherpad/src/static/img/pad/timeslider/crushed_timeslider_mockup.png differ diff --git a/trunk/etherpad/src/static/img/pad/timeslider/current_location.gif b/trunk/etherpad/src/static/img/pad/timeslider/current_location.gif new file mode 100644 index 0000000..5d5062f Binary files /dev/null and b/trunk/etherpad/src/static/img/pad/timeslider/current_location.gif differ diff --git a/trunk/etherpad/src/static/img/pad/timeslider/current_location.png b/trunk/etherpad/src/static/img/pad/timeslider/current_location.png new file mode 100644 index 0000000..ab02792 Binary files /dev/null and b/trunk/etherpad/src/static/img/pad/timeslider/current_location.png differ diff --git a/trunk/etherpad/src/static/img/pad/timeslider/pause.gif b/trunk/etherpad/src/static/img/pad/timeslider/pause.gif new file mode 100644 index 0000000..0fa105b Binary files /dev/null and b/trunk/etherpad/src/static/img/pad/timeslider/pause.gif differ diff --git a/trunk/etherpad/src/static/img/pad/timeslider/pause.png b/trunk/etherpad/src/static/img/pad/timeslider/pause.png new file mode 100644 index 0000000..657782c Binary files /dev/null and b/trunk/etherpad/src/static/img/pad/timeslider/pause.png differ diff --git a/trunk/etherpad/src/static/img/pad/timeslider/play.gif b/trunk/etherpad/src/static/img/pad/timeslider/play.gif new file mode 100644 index 0000000..ae308c2 Binary files /dev/null and b/trunk/etherpad/src/static/img/pad/timeslider/play.gif differ diff --git a/trunk/etherpad/src/static/img/pad/timeslider/play.png b/trunk/etherpad/src/static/img/pad/timeslider/play.png new file mode 100644 index 0000000..19afe03 Binary files /dev/null and b/trunk/etherpad/src/static/img/pad/timeslider/play.png differ diff --git a/trunk/etherpad/src/static/img/pad/timeslider/play_button.png b/trunk/etherpad/src/static/img/pad/timeslider/play_button.png new file mode 100644 index 0000000..bc1736d Binary files /dev/null and b/trunk/etherpad/src/static/img/pad/timeslider/play_button.png differ diff --git a/trunk/etherpad/src/static/img/pad/timeslider/star.gif b/trunk/etherpad/src/static/img/pad/timeslider/star.gif new file mode 100644 index 0000000..f6a2c70 Binary files /dev/null and b/trunk/etherpad/src/static/img/pad/timeslider/star.gif differ diff --git a/trunk/etherpad/src/static/img/pad/timeslider/star.png b/trunk/etherpad/src/static/img/pad/timeslider/star.png new file mode 100644 index 0000000..e0c7099 Binary files /dev/null and b/trunk/etherpad/src/static/img/pad/timeslider/star.png differ diff --git a/trunk/etherpad/src/static/img/pad/timeslider/star_selected.png b/trunk/etherpad/src/static/img/pad/timeslider/star_selected.png new file mode 100644 index 0000000..c336589 Binary files /dev/null and b/trunk/etherpad/src/static/img/pad/timeslider/star_selected.png differ diff --git a/trunk/etherpad/src/static/img/pad/timeslider/stepper_buttons.png b/trunk/etherpad/src/static/img/pad/timeslider/stepper_buttons.png new file mode 100644 index 0000000..e011a45 Binary files /dev/null and b/trunk/etherpad/src/static/img/pad/timeslider/stepper_buttons.png differ diff --git a/trunk/etherpad/src/static/img/pad/timeslider/timeslider_background.png b/trunk/etherpad/src/static/img/pad/timeslider/timeslider_background.png new file mode 100644 index 0000000..faa45c6 Binary files /dev/null and b/trunk/etherpad/src/static/img/pad/timeslider/timeslider_background.png differ diff --git a/trunk/etherpad/src/static/img/pad/timeslider/timeslider_left.png b/trunk/etherpad/src/static/img/pad/timeslider/timeslider_left.png new file mode 100644 index 0000000..594d86b Binary files /dev/null and b/trunk/etherpad/src/static/img/pad/timeslider/timeslider_left.png differ diff --git a/trunk/etherpad/src/static/img/pad/timeslider/timeslider_mockup.png b/trunk/etherpad/src/static/img/pad/timeslider/timeslider_mockup.png new file mode 100644 index 0000000..bc93914 Binary files /dev/null and b/trunk/etherpad/src/static/img/pad/timeslider/timeslider_mockup.png differ diff --git a/trunk/etherpad/src/static/img/pad/timeslider/timeslider_right.png b/trunk/etherpad/src/static/img/pad/timeslider/timeslider_right.png new file mode 100644 index 0000000..3bf10a2 Binary files /dev/null and b/trunk/etherpad/src/static/img/pad/timeslider/timeslider_right.png differ diff --git a/trunk/etherpad/src/static/img/pricing/free.gif b/trunk/etherpad/src/static/img/pricing/free.gif new file mode 100644 index 0000000..bce2a0b Binary files /dev/null and b/trunk/etherpad/src/static/img/pricing/free.gif differ diff --git a/trunk/etherpad/src/static/img/pricing/group.gif b/trunk/etherpad/src/static/img/pricing/group.gif new file mode 100644 index 0000000..b839d3e Binary files /dev/null and b/trunk/etherpad/src/static/img/pricing/group.gif differ diff --git a/trunk/etherpad/src/static/img/pricing/on-demand.gif b/trunk/etherpad/src/static/img/pricing/on-demand.gif new file mode 100644 index 0000000..19d2e57 Binary files /dev/null and b/trunk/etherpad/src/static/img/pricing/on-demand.gif differ diff --git a/trunk/etherpad/src/static/img/pricing/private-network.gif b/trunk/etherpad/src/static/img/pricing/private-network.gif new file mode 100644 index 0000000..70d197f Binary files /dev/null and b/trunk/etherpad/src/static/img/pricing/private-network.gif differ diff --git a/trunk/etherpad/src/static/img/pricing/support.gif b/trunk/etherpad/src/static/img/pricing/support.gif new file mode 100644 index 0000000..7f42f76 Binary files /dev/null and b/trunk/etherpad/src/static/img/pricing/support.gif differ diff --git a/trunk/etherpad/src/static/img/pro/billing/cards-button.gif b/trunk/etherpad/src/static/img/pro/billing/cards-button.gif new file mode 100644 index 0000000..2f9c8cf Binary files /dev/null and b/trunk/etherpad/src/static/img/pro/billing/cards-button.gif differ diff --git a/trunk/etherpad/src/static/img/pro/box/blue-boxtop.gif b/trunk/etherpad/src/static/img/pro/box/blue-boxtop.gif new file mode 100644 index 0000000..38e3538 Binary files /dev/null and b/trunk/etherpad/src/static/img/pro/box/blue-boxtop.gif differ diff --git a/trunk/etherpad/src/static/img/pro/buttons/bluebutton120.gif b/trunk/etherpad/src/static/img/pro/buttons/bluebutton120.gif new file mode 100644 index 0000000..2f22003 Binary files /dev/null and b/trunk/etherpad/src/static/img/pro/buttons/bluebutton120.gif differ diff --git a/trunk/etherpad/src/static/img/pro/header/pro-header-back.gif b/trunk/etherpad/src/static/img/pro/header/pro-header-back.gif new file mode 100644 index 0000000..9514dbf Binary files /dev/null and b/trunk/etherpad/src/static/img/pro/header/pro-header-back.gif differ diff --git a/trunk/etherpad/src/static/img/pro/header/pro-header-logo.png b/trunk/etherpad/src/static/img/pro/header/pro-header-logo.png new file mode 100644 index 0000000..b36daa8 Binary files /dev/null and b/trunk/etherpad/src/static/img/pro/header/pro-header-logo.png differ diff --git a/trunk/etherpad/src/static/img/pro/header/pro-header-logo.xcf b/trunk/etherpad/src/static/img/pro/header/pro-header-logo.xcf new file mode 100644 index 0000000..524c00f Binary files /dev/null and b/trunk/etherpad/src/static/img/pro/header/pro-header-logo.xcf differ diff --git a/trunk/etherpad/src/static/img/pro/header/pro-header-plustopnav-back.gif b/trunk/etherpad/src/static/img/pro/header/pro-header-plustopnav-back.gif new file mode 100644 index 0000000..f7398fe Binary files /dev/null and b/trunk/etherpad/src/static/img/pro/header/pro-header-plustopnav-back.gif differ diff --git a/trunk/etherpad/src/static/img/pro/padlist/gear-drop.gif b/trunk/etherpad/src/static/img/pro/padlist/gear-drop.gif new file mode 100644 index 0000000..ded0f24 Binary files /dev/null and b/trunk/etherpad/src/static/img/pro/padlist/gear-drop.gif differ diff --git a/trunk/etherpad/src/static/img/pro/padlist/paper-icon.gif b/trunk/etherpad/src/static/img/pro/padlist/paper-icon.gif new file mode 100644 index 0000000..161b66e Binary files /dev/null and b/trunk/etherpad/src/static/img/pro/padlist/paper-icon.gif differ diff --git a/trunk/etherpad/src/static/img/pro/padlist/trash-icon.gif b/trunk/etherpad/src/static/img/pro/padlist/trash-icon.gif new file mode 100644 index 0000000..74b5ede Binary files /dev/null and b/trunk/etherpad/src/static/img/pro/padlist/trash-icon.gif differ diff --git a/trunk/etherpad/src/static/img/pro/topnav/pro-topnav-back.gif b/trunk/etherpad/src/static/img/pro/topnav/pro-topnav-back.gif new file mode 100644 index 0000000..336fd05 Binary files /dev/null and b/trunk/etherpad/src/static/img/pro/topnav/pro-topnav-back.gif differ diff --git a/trunk/etherpad/src/static/img/pro/topnav/pro-topnav-notch.gif b/trunk/etherpad/src/static/img/pro/topnav/pro-topnav-notch.gif new file mode 100644 index 0000000..5dbe57b Binary files /dev/null and b/trunk/etherpad/src/static/img/pro/topnav/pro-topnav-notch.gif differ diff --git a/trunk/etherpad/src/static/img/tinyplane.gif b/trunk/etherpad/src/static/img/tinyplane.gif new file mode 100644 index 0000000..5aaa223 Binary files /dev/null and b/trunk/etherpad/src/static/img/tinyplane.gif differ diff --git a/trunk/etherpad/src/static/img/wavejet.jpg b/trunk/etherpad/src/static/img/wavejet.jpg new file mode 100644 index 0000000..8d10fd0 Binary files /dev/null and b/trunk/etherpad/src/static/img/wavejet.jpg differ diff --git a/trunk/etherpad/src/static/js/ace.js b/trunk/etherpad/src/static/js/ace.js new file mode 100644 index 0000000..6766cee --- /dev/null +++ b/trunk/etherpad/src/static/js/ace.js @@ -0,0 +1,29 @@ +Ace2Editor.registry={nextId:1};function Ace2Editor(){var K="Ace2Editor";var F=Ace2Editor;var B={};var A={editor:B,id:(F.registry.nextId++)}; +var D=false;var E=[];function C(R,Q){return function(){var T=this;var S=arguments;function U(){R.apply(T,S); +}if(Q){Q.apply(T,S);}if(D){U();}else{E.push(U);}};}function I(){for(var Q=0;Q'; +};var J=function(Q){return'\x3cscript type="text/javascript" src="'+Q+'">\x3c/script>';};var M=J;var N=H; +var L=function(Q){return'\''";};var G=function(Q){return'\'\\x3cscript type="text/javascript" src="'+Q+"\">\\x3c/script>'"; +};var P=G;var O=L;B.destroy=C(function(){A.ace_dispose();A.frame.parentNode.removeChild(A.frame);delete F.registry[A.id]; +A=null;});B.init=function(Q,S,R){B.importText(S);A.onEditorReady=function(){D=true;I();R();};(function(){var W=''; +var T=["'"+W+"'"];T.push(("('\\n\'');T.push('\' \''); +var X='editorId = "'+A.id+'"; editorInfo = parent.'+K+'.registry[editorId]; window.onload = function() { window.onload = null; setTimeout(function() { var iframe = document.createElement("IFRAME"); iframe.scrolling = "no"; var outerdocbody = document.getElementById("outerdocbody"); iframe.frameBorder = 0; iframe.allowTransparency = true; outerdocbody.insertBefore(iframe, outerdocbody.firstChild); iframe.ace_outerWin = window; readyFunc = function() { editorInfo.onEditorReady(); readyFunc = null; editorInfo = null; }; var doc = iframe.contentWindow.document; doc.open(); doc.write('+T.join("+")+"); doc.close(); }, 0); }"; +var Y=[W,"",(''),'',"\x3cscript>",X,"\x3c/script>",'
x
']; +var U=document.createElement("IFRAME");U.frameBorder=0;A.frame=U;document.getElementById(Q).appendChild(U); +var V=U.contentWindow.document;V.open();V.write(Y.join(""));V.close();B.adjustSize();})();};return B; +} \ No newline at end of file diff --git a/trunk/etherpad/src/static/js/billing.js b/trunk/etherpad/src/static/js/billing.js new file mode 100644 index 0000000..c9fa30e --- /dev/null +++ b/trunk/etherpad/src/static/js/billing.js @@ -0,0 +1,111 @@ +/** + * Copyright 2009 Google Inc. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS-IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +$(function() { + billing.initFieldDisplay(); + billing.initCcValidation(); +}); + +billing.initFieldDisplay = function() { + var id = $('#billingselect input:checked').attr("value"); + $('.billingfield').not('.billingfield.'+id+'req').hide(); + $('.paymentbutton').click(billing.selectPaymentType); + + $('#billingCountry').click(billing.selectCountry); + billing.selectCountry(); +} + +billing.selectCountry = function() { + var countryCode = $('#billingCountry').attr("value"); + var id = $('#billingselect input:checked').attr("value"); + if (countryCode != 'US') { + $('.billingfield.intonly.'+id+'req').show(); + $('.billingfield.usonly').hide(); + } else { + $('.billingfield.intonly').hide(); + $('.billingfield.usonly.'+id+'req').show(); + } +} + +billing.countryAntiSelector = function() { + var countryCode = $('#billingCountry').attr("value"); + if (countryCode != 'US') { + return '.usonly'; + } else { + return '.intonly'; + } +} + +billing.selectPaymentType = function() { + var radio = $(this).children('input'); + var id = radio.attr("value"); + radio.attr("checked", "checked"); + + var selector = billing.countryAntiSelector(); + var toShow = $('.billingfield.'+id+'req:hidden').not('.billingfield'+selector); + var toHide = $('.billingfield:visible').not('.billingfield.'+id+'req'); + + if (toShow.size() > 0 && toHide.size() > 0) { + toHide.fadeOut(200); + setTimeout(function() { + toShow.fadeIn(200); + }, 200); + } else if (toShow.size() > 0 || toHide.size() > 0){ + toShow.fadeIn(200); + toHide.fadeOut(200); + } +} + +billing.extractCcType = function(numsrc) { + var number = $(numsrc).val(); + var newType = billing.getCcType(number); + $('.ccimage').removeClass('ccimageselected'); + if (newType) { + $('#img'+newType).addClass('ccimageselected'); + } + if (billing.validateCcNumber(number)) { + $('input[name=billingCCNumber]').css('border', '1px solid #0f0'); + } else if (billing.validateCcLength(number) || + ! (/^\d*$/.test(number))) { + $('input[name=billingCCNumber]').css('border', '1px solid #f00'); + } else { + $('input[name=billingCCNumber]').css('border', '1px solid black'); + } +} + +billing.handleCcFieldChange = function(target, event) { + if (event && + ! (event.keyCode == 8 || + (event.keyCode >= 32 && event.keyCode <= 126))) { + return; + } + var ccValue = $(target).val(); + if (ccValue == billing.lastCcValue) { + return; + } + billing.lastCcValue = ccValue; + setTimeout(function() { + billing.extractCcType(target); + }, 0); +} + +billing.initCcValidation = function() { + $('input[name=billingCCNumber]').keydown( + function(event) { billing.handleCcFieldChange(this, event); }); + $('input[name=billingCCNumber]').blur( + function() { billing.handleCcFieldChange(this) }); + billing.lastCcValue = $('input[name=billingCCNumber]').val(); +} \ No newline at end of file diff --git a/trunk/etherpad/src/static/js/billing_shared.js b/trunk/etherpad/src/static/js/billing_shared.js new file mode 100644 index 0000000..dc3a00c --- /dev/null +++ b/trunk/etherpad/src/static/js/billing_shared.js @@ -0,0 +1,94 @@ +/** + * Copyright 2009 Google Inc. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS-IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +var billing = {}; + +billing.CC = function(shortName, prefixes, length) { + this.type = shortName; + this.prefixes = prefixes; + this.length = length; + function validateLuhn(number) { + var digits = []; + var sum = 0; + for (var i = 0; i < number.length; ++i) { + var c = Number(number.charAt(number.length-1-i)); + sum += c; + if (i % 2 == 1) { // every second digit + sum += c; + if (2*c >= 10) { + sum -= 9; + } + } + } + return (sum % 10 == 0); + } + this.validatePrefix = function(number) { + for (var i = 0; i < this.prefixes.length; ++i) { + if (number.indexOf(String(this.prefixes[i])) == 0) { + return true; + } + } + return false; + } + this.validateLength = function(number) { + return number.length == this.length; + } + + this.validateNumber = function(number) { + return this.validateLength(number) && + this.validatePrefix(number) && + validateLuhn(number); + } +} + +billing.ccTypes = [ + new billing.CC('amex', [34, 37], 15), + new billing.CC('disc', [6011, 644, 645, 646, 647, 648, 649, 65], 16), + new billing.CC('mc', [51, 52, 53, 54, 55], 16), + new billing.CC('visa', [4], 16)]; + +billing.validateCcNumber = function(number) { + if (! (/^\d+$/.test(number))) { + return false; + } + for (var i = 0; i < billing.ccTypes.length; ++i) { + var ccType = billing.ccTypes[i]; + if (ccType.validatePrefix(number)) { + return ccType.validateNumber(number); + } + } + return false; +} + +billing.validateCcLength = function(number) { + for (var i = 0; i < billing.ccTypes.length; ++i) { + var ccType = billing.ccTypes[i]; + if (ccType.validatePrefix(number)) { + return ccType.validateLength(number); + } + } + return false; +} + +billing.getCcType = function(number) { + for (var i = 0; i < billing.ccTypes.length; ++i) { + var ccType = billing.ccTypes[i]; + if (ccType.validatePrefix(number)) { + return ccType.type; + } + } + return false; +} diff --git a/trunk/etherpad/src/static/js/broadcast.js b/trunk/etherpad/src/static/js/broadcast.js new file mode 100644 index 0000000..9fa8141 --- /dev/null +++ b/trunk/etherpad/src/static/js/broadcast.js @@ -0,0 +1,607 @@ +/** + * Copyright 2009 Google Inc. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS-IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +// just in case... (todo: this must be somewhere else in the client code.) +if (!Array.prototype.map) +{ + Array.prototype.map = function(fun /*, thisp*/) + { + var len = this.length >>> 0; + if (typeof fun != "function") + throw new TypeError(); + + var res = new Array(len); + var thisp = arguments[1]; + for (var i = 0; i < len; i++) + { + if (i in this) + res[i] = fun.call(thisp, this[i], i, this); + } + + return res; + }; +} + +if (!Array.prototype.forEach) +{ + Array.prototype.forEach = function(fun /*, thisp*/) + { + var len = this.length >>> 0; + if (typeof fun != "function") + throw new TypeError(); + + var thisp = arguments[1]; + for (var i = 0; i < len; i++) + { + if (i in this) + fun.call(thisp, this[i], i, this); + } + }; +} + +if (!Array.prototype.indexOf) +{ + Array.prototype.indexOf = function(elt /*, from*/) + { + var len = this.length >>> 0; + + var from = Number(arguments[1]) || 0; + from = (from < 0) + ? Math.ceil(from) + : Math.floor(from); + if (from < 0) + from += len; + + for (; from < len; from++) + { + if (from in this && + this[from] === elt) + return from; + } + return -1; + }; +} + +function debugLog() { + try { + // console.log.apply(console, arguments); + } catch (e) {console.log("error printing: ",e);} +} + +function randomString() { + return "_"+Math.floor(Math.random() * 1000000); +} + +// for IE +if ($.browser.msie) { + try { + document.execCommand("BackgroundImageCache", false, true); + } catch (e) {} +} + +var userId = "hiddenUser" + randomString(); +var socketId; +var socket; + +var channelState = "DISCONNECTED"; + +var appLevelDisconnectReason = null; + +var padContents = { + currentRevision: clientVars.revNum, + currentTime : clientVars.currentTime, + currentLines: Changeset.splitTextLines(clientVars.initialStyledContents.atext.text), + currentDivs : null, // to be filled in once the dom loads + apool: (new AttribPool()).fromJsonable(clientVars.initialStyledContents.apool), + alines: Changeset.splitAttributionLines( + clientVars.initialStyledContents.atext.attribs, + clientVars.initialStyledContents.atext.text), + + // generates a jquery element containing HTML for a line + lineToElement: function(line, aline) { + var element = document.createElement("div"); + var emptyLine = (line == '\n'); + var domInfo = domline.createDomLine(! emptyLine, true); + linestylefilter.populateDomLine(line, aline, this.apool, + domInfo); + domInfo.prepareForAdd(); + element.className = domInfo.node.className; + element.innerHTML = domInfo.node.innerHTML; + element.id = Math.random(); + return $(element); + }, + + applySpliceToDivs: function(start, numRemoved, newLines) { + // remove spliced-out lines from DOM + for(var i=start; i 10000) { + var start = (Math.floor((newRevision) / 10000) * 10000); // revision 0 to 10 + changesetLoader.queueUp(start, 100); + } + + if(BroadcastSlider.getSliderLength() > 1000) { + var start = (Math.floor((newRevision) / 1000) * 1000); // (start from -1, go to 19) + 1 + changesetLoader.queueUp(start, 10); + } + + start = (Math.floor((newRevision) / 100) * 100); + + changesetLoader.queueUp(start, 1, update); + } + BroadcastSlider.setAuthors(padContents.getActiveAuthors().map(function(name) {return authorData[name];})); +} + +var changesetLoader = { + running: false, + resolved: [], + requestQueue1: [], + requestQueue2: [], + requestQueue3: [], + queueUp: function(revision, width, callback) { + if(revision < 0) revision = 0; + // if(changesetLoader.requestQueue.indexOf(revision) != -1) + // return; // already in the queue. + if(changesetLoader.resolved.indexOf(revision+"_"+width) != -1) + return; // already loaded from the server + changesetLoader.resolved.push(revision+"_"+width); + + var requestQueue = width == 1 ? changesetLoader.requestQueue3 : + width == 10 ? changesetLoader.requestQueue2 : + changesetLoader.requestQueue1; + requestQueue.push({'rev': revision, 'res': width, 'callback': callback}); + if(!changesetLoader.running) { + changesetLoader.running = true; + setTimeout(changesetLoader.loadFromQueue, 10); + } + }, + loadFromQueue: function() { + var self = changesetLoader; + var requestQueue = self.requestQueue1.length > 0 ? self.requestQueue1 : + self.requestQueue2.length > 0 ? self.requestQueue2 : + self.requestQueue3.length > 0 ? self.requestQueue3 : null; + + if(!requestQueue) { + self.running = false; + return; + } + + var request = requestQueue.pop(); + var granularity = request.res; + var callback = request.callback; + var start = request.rev; + debugLog("loadinging revision", start, "through ajax"); + $.getJSON( + "/ep/pad/changes/"+clientVars.padIdForUrl+"?s="+start + "&g="+granularity, + function(data, textStatus) { + if(textStatus !== "success") { + console.log(textStatus); + BroadcastSlider.showReconnectUI(); + } + self.handleResponse(data, start, granularity, callback); + + setTimeout(self.loadFromQueue, 10); // load the next ajax function + } + ); + }, + handleResponse: function(data, start, granularity, callback) { + debugLog("response: ", data); + var pool = (new AttribPool()).fromJsonable(data.apool); + for(var i=0; i data.actualEndNum - 1) aend = data.actualEndNum - 1; + debugLog("adding changeset:", astart, aend); + var forwardcs = Changeset.moveOpsToNewPool(data.forwardsChangesets[i], pool, padContents.apool); + var backwardcs = Changeset.moveOpsToNewPool(data.backwardsChangesets[i], pool, padContents.apool); + revisionInfo.addChangeset(astart, aend, forwardcs, backwardcs, data.timeDeltas[i]); + } + if(callback)callback(start - 1, start + data.forwardsChangesets.length * granularity - 1); + } +}; + +function handleMessageFromServer() { + debugLog("handleMessage:", arguments); + var obj = arguments[0]['data']; + var expectedType = "COLLABROOM"; + + obj = JSON.parse(obj); + if (obj['type'] == expectedType) { + obj = obj['data']; + + if (obj['type'] == "NEW_CHANGES") { + debugLog(obj); + var changeset = Changeset.moveOpsToNewPool( + obj.changeset, (new AttribPool()).fromJsonable(obj.apool), + padContents.apool); + + var changesetBack = Changeset.moveOpsToNewPool( + obj.changesetBack, (new AttribPool()).fromJsonable(obj.apool), + padContents.apool); + + loadedNewChangeset(changeset, changesetBack, obj.newRev-1, obj.timeDelta); + } + else if (obj['type'] == "NEW_AUTHORDATA") { + var authorMap = {}; + authorMap[obj.author] = obj.data; + receiveAuthorData(authorMap); + BroadcastSlider.setAuthors(padContents.getActiveAuthors().map(function(name) {return authorData[name];})); + } else if (obj['type'] == "NEW_SAVEDREV") { + var savedRev = obj.savedRev; + BroadcastSlider.addSavedRevision(savedRev.revNum, savedRev); + } + } else { + debugLog("incorrect message type: " + obj['type'] + ", expected " + expectedType); + } +} + +function handleSocketClosed(params) { + debugLog("socket closed!", params); + socket = null; + + BroadcastSlider.showReconnectUI(); + // var reason = appLevelDisconnectReason || params.reason; + // var shouldReconnect = params.reconnect; + // if (shouldReconnect) { + // // determine if this is a tight reconnect loop due to weird connectivity problems + // // reconnectTimes.push(+new Date()); + // var TOO_MANY_RECONNECTS = 8; + // var TOO_SHORT_A_TIME_MS = 10000; + // if (reconnectTimes.length >= TOO_MANY_RECONNECTS && + // ((+new Date()) - reconnectTimes[reconnectTimes.length-TOO_MANY_RECONNECTS]) < + // TOO_SHORT_A_TIME_MS) { + // setChannelState("DISCONNECTED", "looping"); + // } + // else { + // setChannelState("RECONNECTING", reason); + // setUpSocket(); + // } + // } + // else { + // BroadcastSlider.showReconnectUI(); + // setChannelState("DISCONNECTED", reason); + // } +} + +function sendMessage(msg) { + socket.postMessage(JSON.stringify({type: "COLLABROOM", data: msg})); +} + +function setUpSocket() { + // required for Comet + if ((! $.browser.msie) && + (! ($.browser.mozilla && $.browser.version.indexOf("1.8.") == 0))) { + document.domain = document.domain; // for comet + } + + var success = false; + callCatchingErrors("setUpSocket", function() { + appLevelDisconnectReason = null; + + socketId = String(Math.floor(Math.random()*1e12)); + socket = new WebSocket(socketId); + socket.onmessage = wrapRecordingErrors("socket.onmessage", handleMessageFromServer); + socket.onclosed = wrapRecordingErrors("socket.onclosed", handleSocketClosed); + socket.onopen = wrapRecordingErrors("socket.onopen", function() { + setChannelState("CONNECTED"); + var msg = { type:"CLIENT_READY", roomType:'padview', + roomName:'padview/'+clientVars.viewId, + data: { lastRev:clientVars.revNum, + userInfo:{userId: userId} } }; + sendMessage(msg); + }); + // socket.onhiccup = wrapRecordingErrors("socket.onhiccup", handleCometHiccup); + // socket.onlogmessage = function(x) {debugLog(x); }; + socket.connect(); + success = true; + }); + if (success) { + //initialStartConnectTime = +new Date(); + } + else { + abandonConnection("initsocketfail"); + } +} + +function setChannelState(newChannelState, moreInfo) { + if (newChannelState != channelState) { + channelState = newChannelState; + // callbacks.onChannelStateChange(channelState, moreInfo); + } +} + +function abandonConnection(reason) { + if (socket) { + socket.onclosed = function() {}; + socket.onhiccup = function() {}; + socket.disconnect(); + } + socket = null; + setChannelState("DISCONNECTED", reason); +} + +window['onloadFuncts'] = []; +window.onload = function() { + window['isloaded'] = true; + window['onloadFuncts'].forEach(function(funct) { + funct(); + }); +}; + +// to start upon window load, just push a function onto this array +window['onloadFuncts'].push(setUpSocket); +window['onloadFuncts'].push(function() { + // set up the currentDivs and DOM + padContents.currentDivs = []; + $("#padcontent").html(""); + for(var i=0; i 0) { + goToRevisionIfEnabledCount --; + } else { + goToRevision.apply(goToRevision, arguments); + } +} + +BroadcastSlider.onSlider(goToRevisionIfEnabled); + +(function() { + for(var i=0; i revisionInfo.latest) { + revisionInfo.latest = index; + } + + return revisionInfo[index]; +} + +// assuming that there is a path from fromIndex to toIndex, and that the links +// are laid out in a skip-list format +revisionInfo.getPath = function(fromIndex, toIndex) { + var changesets = []; + var spans = []; + var times = []; + var elem = revisionInfo[fromIndex] || revisionInfo.createNew(fromIndex); + if(elem.changesets.length != 0 && fromIndex != toIndex) { + var reverse = !(fromIndex < toIndex) + while(((elem.rev < toIndex) && !reverse) || + ((elem.rev > toIndex) && reverse)) { + var couldNotContinue = false; + var oldRev = elem.rev; + + for(var i = reverse ? elem.changesets.length - 1 : 0; + reverse?i>=0:i 0) && reverse)) { + couldNotContinue = true; + break; + } + + if(((elem.rev + elem.changesets[i].deltaRev <= toIndex) && !reverse) || + ((elem.rev + elem.changesets[i].deltaRev >= toIndex) && reverse)) { + var topush = elem.changesets[i]; + changesets.push(topush.getValue()); + spans.push(elem.changesets[i].deltaRev); + times.push(topush.deltaTime); + elem = revisionInfo[elem.rev + elem.changesets[i].deltaRev]; + break; + } + } + + if(couldNotContinue || oldRev == elem.rev) break; + } + } + + var status = 'partial'; + if(elem.rev == toIndex) + status = 'complete'; + + return { + 'fromRev':fromIndex, + 'rev': elem.rev, + 'status': status, + 'changesets': changesets, + 'spans' : spans, + 'times' : times + }; +} + +// revisionInfo.addChangeset(0, 5, "abcde") +// revisionInfo.addChangeset(5, 10, "fghij") +// revisionInfo.addChangeset(10, 11, "k") +// revisionInfo.addChangeset(11, 12, "l") +// revisionInfo.addChangeset(12, 13, "m") +// revisionInfo.addChangeset(13, 14, "n") +// revisionInfo.addChangeset(14, 15, "o") +// revisionInfo.addChangeset(15, 20, "pqrst") +// +// print (revisionInfo.getPath(15, 0)) diff --git a/trunk/etherpad/src/static/js/broadcast_slider.js b/trunk/etherpad/src/static/js/broadcast_slider.js new file mode 100644 index 0000000..371663e --- /dev/null +++ b/trunk/etherpad/src/static/js/broadcast_slider.js @@ -0,0 +1,401 @@ +/** + * Copyright 2009 Google Inc. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS-IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +var global = this; + +(function() { // wrap this code in its own namespace + var sliderLength = 1000; + var sliderPos = 0; + var sliderActive = false; + var slidercallbacks = []; + var savedRevisions = []; + var sliderPlaying = false; + + function disableSelection(element) { + element.onselectstart = function() { + return false; + }; + element.unselectable = "on"; + element.style.MozUserSelect = "none"; + element.style.cursor = "default"; + } + var _callSliderCallbacks = function(newval) { + sliderPos = newval; + for(var i=0; i'); + newSavedRevision.addClass("star"); + + newSavedRevision.attr('pos', position); + newSavedRevision.css('position', 'absolute'); + newSavedRevision.css('left', (position * ($("#ui-slider-bar").width()-2) / (sliderLength * 1.0)) - 1); + $("#timeslider-slider").append(newSavedRevision); + newSavedRevision.mouseup(function(evt) { + BroadcastSlider.setSliderPosition(position); + }); + savedRevisions.push(newSavedRevision); + }; + + var removeSavedRevision = function (position) { + var element = $("div.star [pos="+position+"]"); + savedRevisions.remove(element); + element.remove(); + return element; + }; + + /* Begin small 'API' */ + function onSlider(callback) { + slidercallbacks.push(callback); + } + + function getSliderPosition() { + return sliderPos; + } + + function setSliderPosition(newpos) { + newpos = Number(newpos); + if(newpos < 0 || newpos > sliderLength) return; + $("#ui-slider-handle").css('left', newpos * ($("#ui-slider-bar").width()-2) / (sliderLength * 1.0)); + $("a.tlink").map(function() { + $(this).attr('href', $(this).attr('thref').replace("%revision%", newpos)); + }); + $("#revision_label").html("Version " + newpos); + + if(newpos == 0) { + $("#leftstar").css('opacity', .5); + $("#leftstep").css('opacity', .5); + } else { + $("#leftstar").css('opacity', 1); + $("#leftstep").css('opacity', 1); + } + + if(newpos == sliderLength) { + $("#rightstar").css('opacity', .5); + $("#rightstep").css('opacity', .5); + } else { + $("#rightstar").css('opacity', 1); + $("#rightstep").css('opacity', 1); + } + + sliderPos = newpos; + _callSliderCallbacks(newpos); + } + + function getSliderLength() { + return sliderLength; + } + + function setSliderLength(newlength) { + sliderLength = newlength; + updateSliderElements(); + } + + // just take over the whole slider screen with a reconnect message + function showReconnectUI() { + if(!clientVars.sliderEnabled || !clientVars.supportsSlider) { + $("#padmain, #rightbars").css('top', "95px"); + $("#timeslider").show(); + } + $('#error').show(); + } + + function setAuthors(authors) { + $("#authorstable").empty(); + var numAnonymous = 0; + var numNamed = 0; + authors.forEach(function(author) { + if(author.name) { + numNamed ++; + var tr = $(''); + var swatchtd = $(''); + var swatch = $('
'); + swatch.css('background-color', clientVars.colorPalette[author.colorId]); + swatchtd.append(swatch); + tr.append(swatchtd); + var nametd = $(''); + nametd.text(author.name || "unnamed"); + tr.append(nametd); + $("#authorstable").append(tr); + } else { + numAnonymous ++; + } + }); + if(numAnonymous > 0) { + var html = ""+(numNamed>0?"...and ":"")+numAnonymous+" unnamed author"+(numAnonymous>1?"s":"")+""; + $("#authorstable").append($(html)); + } if(authors.length == 0) { + $("#authorstable").append($("No Authors")) + } + } + + global.BroadcastSlider = { + onSlider: onSlider, + getSliderPosition: getSliderPosition, + setSliderPosition: setSliderPosition, + getSliderLength: getSliderLength, + setSliderLength: setSliderLength, + isSliderActive: function() {return sliderActive;}, + playpause: playpause, + addSavedRevision: addSavedRevision, + showReconnectUI : showReconnectUI, + setAuthors: setAuthors + } + + function playButtonUpdater() { + if(sliderPlaying) { + if(getSliderPosition()+1 > sliderLength) { + $("#playpause_button_icon").toggleClass('pause'); + sliderPlaying = false; + return; + } + setSliderPosition(getSliderPosition()+1); + + setTimeout(playButtonUpdater, 100); + } + } + + function playpause() { + $("#playpause_button_icon").toggleClass('pause'); + + if(!sliderPlaying) { + if(getSliderPosition() == sliderLength) + setSliderPosition(0); + sliderPlaying = true; + playButtonUpdater(); + } else { + sliderPlaying = false; + } + } + + // assign event handlers to html UI elements after page load + $(window).load(function() { + disableSelection($("#playpause_button")[0]); + disableSelection($("#timeslider")[0]); + + if(clientVars.sliderEnabled && clientVars.supportsSlider) { + $(document).keyup(function(e) { + var code = -1; + if (!e) var e = window.event; + if (e.keyCode) code = e.keyCode; + else if (e.which) code = e.which; + + if(code == 37) { // left + if(!e.shiftKey) { + setSliderPosition(getSliderPosition() - 1); + } else { + var nextStar = 0; // default to first revision in document + for(var i=0; i getSliderPosition() && nextStar > pos) + nextStar = pos; + } + setSliderPosition(nextStar); + } + } else if(code == 32) + playpause(); + + }); + } + + $(window).resize(function() { + updateSliderElements(); + }); + + $("#ui-slider-bar").mousedown(function(evt) { + setSliderPosition(Math.floor((evt.clientX-$("#ui-slider-bar").offset().left) * sliderLength / 742)); + $("#ui-slider-handle").css('left', (evt.clientX-$("#ui-slider-bar").offset().left)); + $("#ui-slider-handle").trigger(evt); + }); + + // Slider dragging + $("#ui-slider-handle").mousedown(function(evt) { + this.startLoc = evt.clientX; + this.currentLoc = parseInt($(this).css('left')); + var self = this; + sliderActive = true; + $(document).mousemove(function(evt2) { + $(self).css('pointer', 'move') + var newloc = self.currentLoc + (evt2.clientX - self.startLoc); + if(newloc < 0) newloc = 0; + if(newloc > ($("#ui-slider-bar").width()-2)) newloc = ($("#ui-slider-bar").width()-2); + $("#revision_label").html("Version " + Math.floor(newloc * sliderLength / ($("#ui-slider-bar").width()-2))); + $(self).css('left', newloc); + if(getSliderPosition() != Math.floor(newloc * sliderLength / ($("#ui-slider-bar").width()-2))) + _callSliderCallbacks(Math.floor(newloc * sliderLength / ($("#ui-slider-bar").width()-2))) + }); + $(document).mouseup(function(evt2) { + $(document).unbind('mousemove'); + $(document).unbind('mouseup'); + sliderActive = false; + var newloc = self.currentLoc + (evt2.clientX - self.startLoc); + if(newloc < 0) newloc = 0; + if(newloc > ($("#ui-slider-bar").width()-2)) newloc = ($("#ui-slider-bar").width()-2); + $(self).css('left', newloc); + // if(getSliderPosition() != Math.floor(newloc * sliderLength / ($("#ui-slider-bar").width()-2))) + setSliderPosition(Math.floor(newloc * sliderLength / ($("#ui-slider-bar").width()-2))) + self.currentLoc = parseInt($(self).css('left')); + }); + }) + + // play/pause toggling + $("#playpause_button").mousedown(function(evt) { + var self = this; + + $(self).css('background-image', 'url(/static/img/pad/timeslider/crushed_button_depressed.png)'); + $(self).mouseup(function(evt2) { + $(self).css('background-image', 'url(/static/img/pad/timeslider/crushed_button_undepressed.png)'); + $(self).unbind('mouseup'); + BroadcastSlider.playpause(); + }); + $(document).mouseup(function(evt2) { + $(self).css('background-image', 'url(/static/img/pad/timeslider/crushed_button_undepressed.png)'); + $(document).unbind('mouseup'); + }); + }); + + // next/prev saved revision and changeset + $('.stepper').mousedown(function(evt) { + var self = this; + var origcss = $(self).css('background-position'); + if (! origcss) { + origcss = $(self).css('background-position-x')+" "+$(self).css('background-position-y'); + } + var origpos = parseInt(origcss.split(" ")[1]); + var newpos = (origpos - 43); + if(newpos < 0) newpos += 87; + + var newcss = (origcss.split(" ")[0] + " " + newpos + "px"); + if($(self).css('opacity') != 1.0) + newcss = origcss; + + $(self).css('background-position', newcss) + + $(self).mouseup(function(evt2) { + $(self).css('background-position',origcss); + $(self).unbind('mouseup'); + $(document).unbind('mouseup'); + if($(self).attr("id") == ("leftstep")) { + setSliderPosition(getSliderPosition() - 1); + } + else if($(self).attr("id") == ("rightstep")) { + setSliderPosition(getSliderPosition() + 1); + } + else if($(self).attr("id") == ("leftstar")) { + var nextStar = 0; // default to first revision in document + for(var i=0; i getSliderPosition() && nextStar > pos) + nextStar = pos; + } + setSliderPosition(nextStar); + } + }); + $(document).mouseup(function(evt2) { + $(self).css('background-position',origcss); + $(self).unbind('mouseup'); + $(document).unbind('mouseup'); + }); + }) + + if(clientVars) { + if(clientVars.fullWidth) { + $("#padpage").css('width', '100%'); + $("#revision").css('position', "absolute") + $("#revision").css('right', "20px") + $("#revision").css('top', "20px") + $("#padmain").css('left', '0px'); + $("#padmain").css('right', '197px'); + $("#padmain").css('width', 'auto'); + $("#rightbars").css('right', '7px'); + $("#rightbars").css('margin-right', '0px'); + $("#timeslider").css('width', 'auto'); + } + + if(clientVars.disableRightBar) { + $("#rightbars").css('display', 'none'); + $('#padmain').css('width', 'auto'); + if(clientVars.fullWidth) + $("#padmain").css('right', '7px'); + else + $("#padmain").css('width', '860px'); + $("#revision").css('position', "absolute"); + $("#revision").css('right', "20px"); + $("#revision").css('top', "20px"); + } + + + if(clientVars.sliderEnabled) { + if(clientVars.supportsSlider) { + $("#padmain, #rightbars").css('top', "95px"); + $("#timeslider").show(); + setSliderLength(clientVars.totalRevs); + setSliderPosition(clientVars.revNum); + clientVars.savedRevisions.forEach(function(revision) { + addSavedRevision(revision.revNum, revision); + }) + } else { + // slider is not supported + $("#padmain, #rightbars").css('top', "95px"); + $("#timeslider").show(); + $("#error").html("The timeslider feature is not supported on this pad. Why not?"); + $("#error").show(); + } + } else { + if(clientVars.supportsSlider) { + setSliderLength(clientVars.totalRevs); + setSliderPosition(clientVars.revNum); + } + } + } + }); +})(); + +BroadcastSlider.onSlider(function(loc) { + $("#viewlatest").html(loc==BroadcastSlider.getSliderLength()?"Viewing latest content":"View latest content"); +}) diff --git a/trunk/etherpad/src/static/js/collab_client.js b/trunk/etherpad/src/static/js/collab_client.js new file mode 100644 index 0000000..d8834d7 --- /dev/null +++ b/trunk/etherpad/src/static/js/collab_client.js @@ -0,0 +1,628 @@ +/** + * Copyright 2009 Google Inc. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS-IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +$(window).bind("load", function() { + getCollabClient.windowLoaded = true; +}); + +/** Call this when the document is ready, and a new Ace2Editor() has been created and inited. + ACE's ready callback does not need to have fired yet. + "serverVars" are from calling doc.getCollabClientVars() on the server. */ +function getCollabClient(ace2editor, serverVars, initialUserInfo, options) { + var editor = ace2editor; + + var rev = serverVars.rev; + var padId = serverVars.padId; + var globalPadId = serverVars.globalPadId; + + var state = "IDLE"; + var stateMessage; + var stateMessageSocketId; + var channelState = "CONNECTING"; + var appLevelDisconnectReason = null; + + var lastCommitTime = 0; + var initialStartConnectTime = 0; + + var userId = initialUserInfo.userId; + var socketId; + var socket; + var userSet = {}; // userId -> userInfo + userSet[userId] = initialUserInfo; + + var reconnectTimes = []; + var caughtErrors = []; + var caughtErrorCatchers = []; + var caughtErrorTimes = []; + var debugMessages = []; + + tellAceAboutHistoricalAuthors(serverVars.historicalAuthorData); + tellAceActiveAuthorInfo(initialUserInfo); + + var callbacks = { + onUserJoin: function() {}, + onUserLeave: function() {}, + onUpdateUserInfo: function() {}, + onChannelStateChange: function() {}, + onClientMessage: function() {}, + onInternalAction: function() {}, + onConnectionTrouble: function() {}, + onServerMessage: function() {} + }; + + $(window).bind("unload", function() { + if (socket) { + socket.onclosed = function() {}; + socket.onhiccup = function() {}; + socket.disconnect(true); + } + }); + if ($.browser.mozilla) { + // Prevent "escape" from taking effect and canceling a comet connection; + // doesn't work if focus is on an iframe. + $(window).bind("keydown", function(evt) { if (evt.which == 27) { evt.preventDefault() } }); + } + + editor.setProperty("userAuthor", userId); + editor.setBaseAttributedText(serverVars.initialAttributedText, serverVars.apool); + editor.setUserChangeNotificationCallback(wrapRecordingErrors("handleUserChanges", handleUserChanges)); + + function abandonConnection(reason) { + if (socket) { + socket.onclosed = function() {}; + socket.onhiccup = function() {}; + socket.disconnect(); + } + socket = null; + setChannelState("DISCONNECTED", reason); + } + + function dmesg(str) { + if (typeof window.ajlog == "string") window.ajlog += str+'\n'; + debugMessages.push(str); + } + + function handleUserChanges() { + if ((! socket) || channelState == "CONNECTING") { + if (channelState == "CONNECTING" && (((+new Date()) - initialStartConnectTime) > 20000)) { + abandonConnection("initsocketfail"); // give up + } + else { + // check again in a bit + setTimeout(wrapRecordingErrors("setTimeout(handleUserChanges)", handleUserChanges), + 1000); + } + return; + } + + var t = (+new Date()); + + if (state != "IDLE") { + if (state == "COMMITTING" && (t - lastCommitTime) > 20000) { + // a commit is taking too long + appLevelDisconnectReason = "slowcommit"; + socket.disconnect(); + } + else if (state == "COMMITTING" && (t - lastCommitTime) > 5000) { + callbacks.onConnectionTrouble("SLOW"); + } + else { + // run again in a few seconds, to detect a disconnect + setTimeout(wrapRecordingErrors("setTimeout(handleUserChanges)", handleUserChanges), + 3000); + } + return; + } + + var earliestCommit = lastCommitTime + 500; + if (t < earliestCommit) { + setTimeout(wrapRecordingErrors("setTimeout(handleUserChanges)", handleUserChanges), + earliestCommit - t); + return; + } + + var sentMessage = false; + var userChangesData = editor.prepareUserChangeset(); + if (userChangesData.changeset) { + lastCommitTime = t; + state = "COMMITTING"; + stateMessage = {type:"USER_CHANGES", baseRev:rev, + changeset:userChangesData.changeset, + apool: userChangesData.apool }; + stateMessageSocketId = socketId; + sendMessage(stateMessage); + sentMessage = true; + callbacks.onInternalAction("commitPerformed"); + } + + if (sentMessage) { + // run again in a few seconds, to detect a disconnect + setTimeout(wrapRecordingErrors("setTimeout(handleUserChanges)", handleUserChanges), + 3000); + } + } + + function getStats() { + var stats = {}; + + stats.screen = [$(window).width(), $(window).height(), + window.screen.availWidth, window.screen.availHeight, + window.screen.width, window.screen.height].join(','); + stats.ip = serverVars.clientIp; + stats.useragent = serverVars.clientAgent; + + return stats; + } + + function setUpSocket() { + var success = false; + callCatchingErrors("setUpSocket", function() { + appLevelDisconnectReason = null; + + var oldSocketId = socketId; + socketId = String(Math.floor(Math.random()*1e12)); + socket = new WebSocket(socketId); + socket.onmessage = wrapRecordingErrors("socket.onmessage", handleMessageFromServer); + socket.onclosed = wrapRecordingErrors("socket.onclosed", handleSocketClosed); + socket.onopen = wrapRecordingErrors("socket.onopen", function() { + hiccupCount = 0; + setChannelState("CONNECTED"); + var msg = { type:"CLIENT_READY", roomType:'padpage', + roomName:'padpage/'+globalPadId, + data: { + lastRev:rev, + userInfo:userSet[userId], + stats: getStats() } }; + if (oldSocketId) { + msg.data.isReconnectOf = oldSocketId; + msg.data.isCommitPending = (state == "COMMITTING"); + } + sendMessage(msg); + doDeferredActions(); + }); + socket.onhiccup = wrapRecordingErrors("socket.onhiccup", handleCometHiccup); + socket.onlogmessage = dmesg; + socket.connect(); + success = true; + }); + if (success) { + initialStartConnectTime = +new Date(); + } + else { + abandonConnection("initsocketfail"); + } + } + function setUpSocketWhenWindowLoaded() { + if (getCollabClient.windowLoaded) { + setUpSocket(); + } + else { + setTimeout(setUpSocketWhenWindowLoaded, 200); + } + } + setTimeout(setUpSocketWhenWindowLoaded, 0); + + var hiccupCount = 0; + function handleCometHiccup(params) { + dmesg("HICCUP (connected:"+(!!params.connected)+")"); + var connectedNow = params.connected; + if (! connectedNow) { + hiccupCount++; + // skip first "cut off from server" notification + if (hiccupCount > 1) { + setChannelState("RECONNECTING"); + } + } + else { + hiccupCount = 0; + setChannelState("CONNECTED"); + } + } + + function sendMessage(msg) { + socket.postMessage(JSON.stringify({type: "COLLABROOM", data: msg})); + } + + function wrapRecordingErrors(catcher, func) { + return function() { + try { + return func.apply(this, Array.prototype.slice.call(arguments)); + } + catch (e) { + caughtErrors.push(e); + caughtErrorCatchers.push(catcher); + caughtErrorTimes.push(+new Date()); + //console.dir({catcher: catcher, e: e}); + throw e; + } + }; + } + + function callCatchingErrors(catcher, func) { + try { + wrapRecordingErrors(catcher, func)(); + } + catch (e) { /*absorb*/ } + } + + function handleMessageFromServer(evt) { + if (! socket) return; + if (! evt.data) return; + var wrapper = JSON.parse(evt.data); + if(wrapper.type != "COLLABROOM") return; + var msg = wrapper.data; + if (msg.type == "NEW_CHANGES") { + var newRev = msg.newRev; + var changeset = msg.changeset; + var author = (msg.author || ''); + var apool = msg.apool; + if (newRev != (rev+1)) { + dmesg("bad message revision on NEW_CHANGES: "+newRev+" not "+(rev+1)); + socket.disconnect(); + return; + } + rev = newRev; + editor.applyChangesToBase(changeset, author, apool); + } + else if (msg.type == "ACCEPT_COMMIT") { + var newRev = msg.newRev; + if (newRev != (rev+1)) { + dmesg("bad message revision on ACCEPT_COMMIT: "+newRev+" not "+(rev+1)); + socket.disconnect(); + return; + } + rev = newRev; + editor.applyPreparedChangesetToBase(); + setStateIdle(); + callCatchingErrors("onInternalAction", function() { + callbacks.onInternalAction("commitAcceptedByServer"); + }); + callCatchingErrors("onConnectionTrouble", function() { + callbacks.onConnectionTrouble("OK"); + }); + handleUserChanges(); + } + else if (msg.type == "NO_COMMIT_PENDING") { + if (state == "COMMITTING") { + // server missed our commit message; abort that commit + setStateIdle(); + handleUserChanges(); + } + } + else if (msg.type == "USER_NEWINFO") { + var userInfo = msg.userInfo; + var id = userInfo.userId; + if (userSet[id]) { + userSet[id] = userInfo; + callbacks.onUpdateUserInfo(userInfo); + dmesgUsers(); + } + else { + userSet[id] = userInfo; + callbacks.onUserJoin(userInfo); + dmesgUsers(); + } + tellAceActiveAuthorInfo(userInfo); + } + else if (msg.type == "USER_LEAVE") { + var userInfo = msg.userInfo; + var id = userInfo.userId; + if (userSet[id]) { + delete userSet[userInfo.userId]; + fadeAceAuthorInfo(userInfo); + callbacks.onUserLeave(userInfo); + dmesgUsers(); + } + } + else if (msg.type == "DISCONNECT_REASON") { + appLevelDisconnectReason = msg.reason; + } + else if (msg.type == "CLIENT_MESSAGE") { + callbacks.onClientMessage(msg.payload); + } + else if (msg.type == "SERVER_MESSAGE") { + callbacks.onServerMessage(msg.payload); + } + } + function updateUserInfo(userInfo) { + userInfo.userId = userId; + userSet[userId] = userInfo; + tellAceActiveAuthorInfo(userInfo); + if (! socket) return; + sendMessage({type: "USERINFO_UPDATE", userInfo:userInfo}); + } + + function tellAceActiveAuthorInfo(userInfo) { + tellAceAuthorInfo(userInfo.userId, userInfo.colorId); + } + function tellAceAuthorInfo(userId, colorId, inactive) { + if (colorId || (typeof colorId) == "number") { + colorId = Number(colorId); + if (options && options.colorPalette && options.colorPalette[colorId]) { + var cssColor = options.colorPalette[colorId]; + if (inactive) { + editor.setAuthorInfo(userId, {bgcolor: cssColor, fade: 0.5}); + } + else { + editor.setAuthorInfo(userId, {bgcolor: cssColor}); + } + } + } + } + function fadeAceAuthorInfo(userInfo) { + tellAceAuthorInfo(userInfo.userId, userInfo.colorId, true); + } + + function getConnectedUsers() { + return valuesArray(userSet); + } + + function tellAceAboutHistoricalAuthors(hadata) { + for(var author in hadata) { + var data = hadata[author]; + if (! userSet[author]) { + tellAceAuthorInfo(author, data.colorId, true); + } + } + } + + function dmesgUsers() { + //pad.dmesg($.map(getConnectedUsers(), function(u) { return u.userId.slice(-2); }).join(',')); + } + + function handleSocketClosed(params) { + socket = null; + + $.each(keys(userSet), function() { + var uid = String(this); + if (uid != userId) { + var userInfo = userSet[uid]; + delete userSet[uid]; + callbacks.onUserLeave(userInfo); + dmesgUsers(); + } + }); + + var reason = appLevelDisconnectReason || params.reason; + var shouldReconnect = params.reconnect; + if (shouldReconnect) { + + // determine if this is a tight reconnect loop due to weird connectivity problems + reconnectTimes.push(+new Date()); + var TOO_MANY_RECONNECTS = 8; + var TOO_SHORT_A_TIME_MS = 10000; + if (reconnectTimes.length >= TOO_MANY_RECONNECTS && + ((+new Date()) - reconnectTimes[reconnectTimes.length-TOO_MANY_RECONNECTS]) < + TOO_SHORT_A_TIME_MS) { + setChannelState("DISCONNECTED", "looping"); + } + else { + setChannelState("RECONNECTING", reason); + setUpSocket(); + } + + } + else { + setChannelState("DISCONNECTED", reason); + } + } + + function setChannelState(newChannelState, moreInfo) { + if (newChannelState != channelState) { + channelState = newChannelState; + callbacks.onChannelStateChange(channelState, moreInfo); + } + } + + function keys(obj) { + var array = []; + $.each(obj, function (k, v) { array.push(k); }); + return array; + } + function valuesArray(obj) { + var array = []; + $.each(obj, function (k, v) { array.push(v); }); + return array; + } + + // We need to present a working interface even before the socket + // is connected for the first time. + var deferredActions = []; + function defer(func, tag) { + return function() { + var that = this; + var args = arguments; + function action() { + func.apply(that, args); + } + action.tag = tag; + if (channelState == "CONNECTING") { + deferredActions.push(action); + } + else { + action(); + } + } + } + function doDeferredActions(tag) { + var newArray = []; + for(var i=0;i maxDebugMessages) { + debugMessages = debugMessages.slice(debugMessages.length-maxDebugMessages, + debugMessages.length); + } + + info.debugMessages = {length: 0}; + for(var i=0;i 0) { + var f = idleFuncs.shift(); + f(); + } + } + }, 0); + } + + var self; + return (self = { + setOnUserJoin: function(cb) { callbacks.onUserJoin = cb; }, + setOnUserLeave: function(cb) { callbacks.onUserLeave = cb; }, + setOnUpdateUserInfo: function(cb) { callbacks.onUpdateUserInfo = cb; }, + setOnChannelStateChange: function(cb) { callbacks.onChannelStateChange = cb; }, + setOnClientMessage: function(cb) { callbacks.onClientMessage = cb; }, + setOnInternalAction: function(cb) { callbacks.onInternalAction = cb; }, + setOnConnectionTrouble: function(cb) { callbacks.onConnectionTrouble = cb; }, + setOnServerMessage: function(cb) { callbacks.onServerMessage = cb; }, + updateUserInfo: defer(updateUserInfo), + getConnectedUsers: getConnectedUsers, + sendClientMessage: sendClientMessage, + getCurrentRevisionNumber: getCurrentRevisionNumber, + getDiagnosticInfo: getDiagnosticInfo, + getMissedChanges: getMissedChanges, + callWhenNotCommitting: callWhenNotCommitting, + addHistoricalAuthors: tellAceAboutHistoricalAuthors + }); +} + +function selectElementContents(elem) { + if ($.browser.msie) { + var range = document.body.createTextRange(); + range.moveToElementText(elem); + range.select(); + } + else { + if (window.getSelection) { + var browserSelection = window.getSelection(); + if (browserSelection) { + var range = document.createRange(); + range.selectNodeContents(elem); + browserSelection.removeAllRanges(); + browserSelection.addRange(range); + } + } + } +} diff --git a/trunk/etherpad/src/static/js/colorutils.js b/trunk/etherpad/src/static/js/colorutils.js new file mode 100644 index 0000000..e745f8e --- /dev/null +++ b/trunk/etherpad/src/static/js/colorutils.js @@ -0,0 +1,91 @@ +// DO NOT EDIT THIS FILE, edit infrastructure/ace/www/colorutils.js + +/** + * Copyright 2009 Google Inc. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS-IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +var colorutils = {}; + +// "#ffffff" or "#fff" or "ffffff" or "fff" to [1.0, 1.0, 1.0] +colorutils.css2triple = function(cssColor) { + var sixHex = colorutils.css2sixhex(cssColor); + function hexToFloat(hh) { + return Number("0x"+hh)/255; + } + return [hexToFloat(sixHex.substr(0,2)), + hexToFloat(sixHex.substr(2,2)), + hexToFloat(sixHex.substr(4,2))]; +} + +// "#ffffff" or "#fff" or "ffffff" or "fff" to "ffffff" +colorutils.css2sixhex = function(cssColor) { + var h = /[0-9a-fA-F]+/.exec(cssColor)[0]; + if (h.length != 6) { + var a = h.charAt(0); + var b = h.charAt(1); + var c = h.charAt(2); + h = a+a+b+b+c+c; + } + return h; +} + +// [1.0, 1.0, 1.0] -> "#ffffff" +colorutils.triple2css = function(triple) { + function floatToHex(n) { + var n2 = colorutils.clamp(Math.round(n*255), 0, 255); + return ("0"+n2.toString(16)).slice(-2); + } + return "#" + floatToHex(triple[0]) + + floatToHex(triple[1]) + floatToHex(triple[2]); +} + + +colorutils.clamp = function(v,bot,top) { return v < bot ? bot : (v > top ? top : v); }; +colorutils.min3 = function(a,b,c) { return (a < b) ? (a < c ? a : c) : (b < c ? b : c); }; +colorutils.max3 = function(a,b,c) { return (a > b) ? (a > c ? a : c) : (b > c ? b : c); }; +colorutils.colorMin = function(c) { return colorutils.min3(c[0], c[1], c[2]); }; +colorutils.colorMax = function(c) { return colorutils.max3(c[0], c[1], c[2]); }; +colorutils.scale = function(v, bot, top) { return colorutils.clamp(bot + v*(top-bot), 0, 1); }; +colorutils.unscale = function(v, bot, top) { return colorutils.clamp((v-bot)/(top-bot), 0, 1); }; + +colorutils.scaleColor = function(c, bot, top) { + return [colorutils.scale(c[0], bot, top), + colorutils.scale(c[1], bot, top), + colorutils.scale(c[2], bot, top)]; +} + +colorutils.unscaleColor = function(c, bot, top) { + return [colorutils.unscale(c[0], bot, top), + colorutils.unscale(c[1], bot, top), + colorutils.unscale(c[2], bot, top)]; +} + +colorutils.luminosity = function(c) { + // rule of thumb for RGB brightness; 1.0 is white + return c[0]*0.30 + c[1]*0.59 + c[2]*0.11; +} + +colorutils.saturate = function(c) { + var min = colorutils.colorMin(c); + var max = colorutils.colorMax(c); + if (max - min <= 0) return [1.0, 1.0, 1.0]; + return colorutils.unscaleColor(c, min, max); +} + +colorutils.blend = function(c1, c2, t) { + return [colorutils.scale(t, c1[0], c2[0]), + colorutils.scale(t, c1[1], c2[1]), + colorutils.scale(t, c1[2], c2[2])]; +} diff --git a/trunk/etherpad/src/static/js/confirmation.js b/trunk/etherpad/src/static/js/confirmation.js new file mode 100644 index 0000000..a0f725c --- /dev/null +++ b/trunk/etherpad/src/static/js/confirmation.js @@ -0,0 +1,21 @@ +/** + * Copyright 2009 Google Inc. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS-IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +$(function() { + $('#shoppingform').submit(function() { + $('#contbutton').attr("disabled", true).attr("value", "Purchasing..."); + }); +}) \ No newline at end of file diff --git a/trunk/etherpad/src/static/js/connection_diagnostics.js b/trunk/etherpad/src/static/js/connection_diagnostics.js new file mode 100644 index 0000000..cc43d46 --- /dev/null +++ b/trunk/etherpad/src/static/js/connection_diagnostics.js @@ -0,0 +1,126 @@ +/** + * Copyright 2009 Google Inc. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS-IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +diagnostics = {}; + +diagnostics.data = {}; + +diagnostics.steps = [ + ['init', "Initializing"], + ['examineBrowser', "Examining web browser"], + ['testStreaming', "Testing primary transport (streaming)"], + ['testPolling', "Testing secondary transport (polling)"], + ['testHiccups', "Testing connection hiccups"], + ['sendInfo', "Sending information"], + ['showResult', ""] +]; + +diagnostics.processNext = function(i) { + if (i < diagnostics.steps.length) { + var msg = "Step "+(i+1)+": "+diagnostics.steps[i][1]+"..."; + $('#statusmsg').html(msg); + diagnostics[diagnostics.steps[i][0]](function() { + diagnostics.processNext(i+1); + }); + } +}; + +$(document).ready(function() { + diagnostics.processNext(0); + + var emailClicked = false; + $('#email').click(function() { + if (!emailClicked) { + $('#email').select(); + emailClicked = true; + } + }); + + $('#emailsubmit').click(function() { + function err(m) { + $('#emailerrormsg').hide().html(m).fadeIn('fast'); + } + var email = $('#email').val(); + if (!etherpad.validEmail(email)) { + err("That doesn't look like a valid email address."); + return; + } + $.ajax({ + type: 'post', + url: '/ep/connection-diagnostics/submitemail', + data: {email: email, diagnosticStorableId: clientVars.diagnosticStorableId}, + success: success, + error: error + }); + function success(responseText) { + if (responseText == "OK") { + $('#emailform').html("

Thanks! We will look at your case shortly.

"); + } else { + err(responseText); + } + } + function error() { + err("There was an error processing your request."); + } + }); +}); + +diagnostics.init = function(done) { + setTimeout(done, 1000); +}; + +diagnostics.examineBrowser = function(done) { + setTimeout(done, 1000); +}; + +diagnostics.testStreaming = function(done) { + setTimeout(done, 1000); +}; + +diagnostics.testPolling = function(done) { + setTimeout(done, 1000); +}; + +diagnostics.testHiccups = function(done) { + setTimeout(done, 1000); +}; + +diagnostics.sendInfo = function(done) { + + // TODO(jd): remove these test data when you submit actual data. + diagnostics.data.test1 = "foo"; + diagnostics.data.test2 = "bar"; + diagnostics.data.testNested = {a: 1, b: 2, c: 3}; + + // send data object back to server. + $.ajax({ + type: 'post', + url: '/ep/connection-diagnostics/submitdata', + data: {dataJson: JSON.stringify(diagnostics.data), + diagnosticStorableId: clientVars.diagnosticStorableId}, + success: done, + error: function() { alert("There was an error submitting the diagnostic information to the server."); done(); } + }); +}; + +diagnostics.showResult = function(done) { + $('#linkanimation').hide(); + $('#statusmsg').html("
Result: your browser and internet" + + " connection appear to be incompatibile with EtherPad."); + $('#statusmsg').css('color', '#520'); + $('#emailform').show(); +}; + diff --git a/trunk/etherpad/src/static/js/cssmanager_client.js b/trunk/etherpad/src/static/js/cssmanager_client.js new file mode 100644 index 0000000..04ed641 --- /dev/null +++ b/trunk/etherpad/src/static/js/cssmanager_client.js @@ -0,0 +1,88 @@ +// DO NOT EDIT THIS FILE, edit infrastructure/ace/www/cssmanager.js + +/** + * Copyright 2009 Google Inc. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS-IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +function makeCSSManager(emptyStylesheetTitle) { + + function getSheetByTitle(title) { + var allSheets = document.styleSheets; + for(var i=0;i= 0) { + browserDeleteRule(i); + selectorList.splice(i, 1); + } + } + + return {selectorStyle:selectorStyle, removeSelectorStyle:removeSelectorStyle, + info: function() { + return selectorList.length+":"+browserRules().length; + }}; +} diff --git a/trunk/etherpad/src/static/js/domline_client.js b/trunk/etherpad/src/static/js/domline_client.js new file mode 100644 index 0000000..de2e7d3 --- /dev/null +++ b/trunk/etherpad/src/static/js/domline_client.js @@ -0,0 +1,210 @@ +// DO NOT EDIT THIS FILE, edit infrastructure/ace/www/domline.js + +/** + * Copyright 2009 Google Inc. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS-IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +var domline = {}; +domline.noop = function() {}; +domline.identity = function(x) { return x; }; + +domline.addToLineClass = function(lineClass, cls) { + // an "empty span" at any point can be used to add classes to + // the line, using line:className. otherwise, we ignore + // the span. + cls.replace(/\S+/g, function (c) { + if (c.indexOf("line:") == 0) { + // add class to line + lineClass = (lineClass ? lineClass+' ' : '')+c.substring(5); + } + }); + return lineClass; +} + +// if "document" is falsy we don't create a DOM node, just +// an object with innerHTML and className +domline.createDomLine = function(nonEmpty, doesWrap, optBrowser, optDocument) { + var result = { node: null, + appendSpan: domline.noop, + prepareForAdd: domline.noop, + notifyAdded: domline.noop, + clearSpans: domline.noop, + finishUpdate: domline.noop, + lineMarker: 0 }; + + var browser = (optBrowser || {}); + var document = optDocument; + + if (document) { + result.node = document.createElement("div"); + } + else { + result.node = {innerHTML: '', className: ''}; + } + + var html = []; + var preHtml, postHtml; + var curHTML = null; + function processSpaces(s) { + return domline.processSpaces(s, doesWrap); + } + var identity = domline.identity; + var perTextNodeProcess = (doesWrap ? identity : processSpaces); + var perHtmlLineProcess = (doesWrap ? processSpaces : identity); + var lineClass = 'ace-line'; + result.appendSpan = function(txt, cls) { + if (cls.indexOf('list') >= 0) { + var listType = /(?:^| )list:(\S+)/.exec(cls); + if (listType) { + listType = listType[1]; + if (listType) { + preHtml = '
  • '; + postHtml = '
'; + } + result.lineMarker += txt.length; + return; // don't append any text + } + } + var href = null; + var simpleTags = null; + if (cls.indexOf('url') >= 0) { + cls = cls.replace(/(^| )url:(\S+)/g, function(x0, space, url) { + href = url; + return space+"url"; + }); + } + if (cls.indexOf('tag') >= 0) { + cls = cls.replace(/(^| )tag:(\S+)/g, function(x0, space, tag) { + if (! simpleTags) simpleTags = []; + simpleTags.push(tag.toLowerCase()); + return space+tag; + }); + } + if ((! txt) && cls) { + lineClass = domline.addToLineClass(lineClass, cls); + } + else if (txt) { + var extraOpenTags = ""; + var extraCloseTags = ""; + if (href) { + extraOpenTags = extraOpenTags+''; + extraCloseTags = ''+extraCloseTags; + } + if (simpleTags) { + simpleTags.sort(); + extraOpenTags = extraOpenTags+'<'+simpleTags.join('><')+'>'; + simpleTags.reverse(); + extraCloseTags = ''+extraCloseTags; + } + html.push('',extraOpenTags, + perTextNodeProcess(domline.escapeHTML(txt)), + extraCloseTags,''); + } + }; + result.clearSpans = function() { + html = []; + lineClass = ''; // non-null to cause update + result.lineMarker = 0; + }; + function writeHTML() { + var newHTML = perHtmlLineProcess(html.join('')); + if (! newHTML) { + if ((! document) || (! optBrowser)) { + newHTML += ' '; + } + else if (! browser.msie) { + newHTML += '
'; + } + } + if (nonEmpty) { + newHTML = (preHtml||'')+newHTML+(postHtml||''); + } + html = preHtml = postHtml = null; // free memory + if (newHTML !== curHTML) { + curHTML = newHTML; + result.node.innerHTML = curHTML; + } + if (lineClass !== null) result.node.className = lineClass; + } + result.prepareForAdd = writeHTML; + result.finishUpdate = writeHTML; + result.getInnerHTML = function() { return curHTML || ''; }; + + return result; +}; + +domline.escapeHTML = function(s) { + var re = /[&<>'"]/g; /']/; // stupid indentation thing + if (! re.MAP) { + // persisted across function calls! + re.MAP = { + '&': '&', + '<': '<', + '>': '>', + '"': '"', + "'": ''' + }; + } + return s.replace(re, function(c) { return re.MAP[c]; }); +}; + +domline.processSpaces = function(s, doesWrap) { + if (s.indexOf("<") < 0 && ! doesWrap) { + // short-cut + return s.replace(/ /g, ' '); + } + var parts = []; + s.replace(/<[^>]*>?| |[^ <]+/g, function(m) { parts.push(m); }); + if (doesWrap) { + var endOfLine = true; + var beforeSpace = false; + // last space in a run is normal, others are nbsp, + // end of line is nbsp + for(var i=parts.length-1;i>=0;i--) { + var p = parts[i]; + if (p == " ") { + if (endOfLine || beforeSpace) + parts[i] = ' '; + endOfLine = false; + beforeSpace = true; + } + else if (p.charAt(0) != "<") { + endOfLine = false; + beforeSpace = false; + } + } + // beginning of line is nbsp + for(var i=0;i= ",oldLen," in ",cs); break; + case '+': { + calcNewLen += o.chars; numInserted += o.chars; + Changeset.assert(calcNewLen < newLen, calcNewLen," >= ",newLen," in ",cs); + break; + } + } + assem.append(o); + } + + calcNewLen += oldLen - oldPos; + charBank = charBank.substring(0, numInserted); + while (charBank.length < numInserted) { + charBank += "?"; + } + + assem.endDocument(); + var normalized = Changeset.pack(oldLen, calcNewLen, assem.toString(), charBank); + Changeset.assert(normalized == cs, normalized,' != ',cs); + + return cs; +} + +Changeset.smartOpAssembler = function() { + // Like opAssembler but able to produce conforming changesets + // from slightly looser input, at the cost of speed. + // Specifically: + // - merges consecutive operations that can be merged + // - strips final "=" + // - ignores 0-length changes + // - reorders consecutive + and - (which margingOpAssembler doesn't do) + + var minusAssem = Changeset.mergingOpAssembler(); + var plusAssem = Changeset.mergingOpAssembler(); + var keepAssem = Changeset.mergingOpAssembler(); + var assem = Changeset.stringAssembler(); + var lastOpcode = ''; + var lengthChange = 0; + + function flushKeeps() { + assem.append(keepAssem.toString()); + keepAssem.clear(); + } + + function flushPlusMinus() { + assem.append(minusAssem.toString()); + minusAssem.clear(); + assem.append(plusAssem.toString()); + plusAssem.clear(); + } + + function append(op) { + if (! op.opcode) return; + if (! op.chars) return; + + if (op.opcode == '-') { + if (lastOpcode == '=') { + flushKeeps(); + } + minusAssem.append(op); + lengthChange -= op.chars; + } + else if (op.opcode == '+') { + if (lastOpcode == '=') { + flushKeeps(); + } + plusAssem.append(op); + lengthChange += op.chars; + } + else if (op.opcode == '=') { + if (lastOpcode != '=') { + flushPlusMinus(); + } + keepAssem.append(op); + } + lastOpcode = op.opcode; + } + + function appendOpWithText(opcode, text, attribs, pool) { + var op = Changeset.newOp(opcode); + op.attribs = Changeset.makeAttribsString(opcode, attribs, pool); + var lastNewlinePos = text.lastIndexOf('\n'); + if (lastNewlinePos < 0) { + op.chars = text.length; + op.lines = 0; + append(op); + } + else { + op.chars = lastNewlinePos+1; + op.lines = text.match(/\n/g).length; + append(op); + op.chars = text.length - (lastNewlinePos+1); + op.lines = 0; + append(op); + } + } + + function toString() { + flushPlusMinus(); + flushKeeps(); + return assem.toString(); + } + + function clear() { + minusAssem.clear(); + plusAssem.clear(); + keepAssem.clear(); + assem.clear(); + lengthChange = 0; + } + + function endDocument() { + keepAssem.endDocument(); + } + + function getLengthChange() { + return lengthChange; + } + + return {append: append, toString: toString, clear: clear, endDocument: endDocument, + appendOpWithText: appendOpWithText, getLengthChange: getLengthChange }; +}; + +if (_opt) { + Changeset.mergingOpAssembler = function() { + var assem = _opt.mergingOpAssembler(); + + function append(op) { + assem.append(op.opcode, op.chars, op.lines, op.attribs); + } + function toString() { + return assem.toString(); + } + function clear() { + assem.clear(); + } + function endDocument() { + assem.endDocument(); + } + + return {append: append, toString: toString, clear: clear, endDocument: endDocument}; + }; +} +else { + Changeset.mergingOpAssembler = function() { + // This assembler can be used in production; it efficiently + // merges consecutive operations that are mergeable, ignores + // no-ops, and drops final pure "keeps". It does not re-order + // operations. + var assem = Changeset.opAssembler(); + var bufOp = Changeset.newOp(); + + // If we get, for example, insertions [xxx\n,yyy], those don't merge, + // but if we get [xxx\n,yyy,zzz\n], that merges to [xxx\nyyyzzz\n]. + // This variable stores the length of yyy and any other newline-less + // ops immediately after it. + var bufOpAdditionalCharsAfterNewline = 0; + + function flush(isEndDocument) { + if (bufOp.opcode) { + if (isEndDocument && bufOp.opcode == '=' && ! bufOp.attribs) { + // final merged keep, leave it implicit + } + else { + assem.append(bufOp); + if (bufOpAdditionalCharsAfterNewline) { + bufOp.chars = bufOpAdditionalCharsAfterNewline; + bufOp.lines = 0; + assem.append(bufOp); + bufOpAdditionalCharsAfterNewline = 0; + } + } + bufOp.opcode = ''; + } + } + function append(op) { + if (op.chars > 0) { + if (bufOp.opcode == op.opcode && bufOp.attribs == op.attribs) { + if (op.lines > 0) { + // bufOp and additional chars are all mergeable into a multi-line op + bufOp.chars += bufOpAdditionalCharsAfterNewline + op.chars; + bufOp.lines += op.lines; + bufOpAdditionalCharsAfterNewline = 0; + } + else if (bufOp.lines == 0) { + // both bufOp and op are in-line + bufOp.chars += op.chars; + } + else { + // append in-line text to multi-line bufOp + bufOpAdditionalCharsAfterNewline += op.chars; + } + } + else { + flush(); + Changeset.copyOp(op, bufOp); + } + } + } + function endDocument() { + flush(true); + } + function toString() { + flush(); + return assem.toString(); + } + function clear() { + assem.clear(); + Changeset.clearOp(bufOp); + } + return {append: append, toString: toString, clear: clear, endDocument: endDocument}; + }; +} + +if (_opt) { + Changeset.opAssembler = function() { + var assem = _opt.opAssembler(); + // this function allows op to be mutated later (doesn't keep a ref) + function append(op) { + assem.append(op.opcode, op.chars, op.lines, op.attribs); + } + function toString() { + return assem.toString(); + } + function clear() { + assem.clear(); + } + return {append: append, toString: toString, clear: clear}; + }; +} +else { + Changeset.opAssembler = function() { + var pieces = []; + // this function allows op to be mutated later (doesn't keep a ref) + function append(op) { + pieces.push(op.attribs); + if (op.lines) { + pieces.push('|', Changeset.numToString(op.lines)); + } + pieces.push(op.opcode); + pieces.push(Changeset.numToString(op.chars)); + } + function toString() { + return pieces.join(''); + } + function clear() { + pieces.length = 0; + } + return {append: append, toString: toString, clear: clear}; + }; +} + +Changeset.stringIterator = function(str) { + var curIndex = 0; + function assertRemaining(n) { + Changeset.assert(n <= remaining(), "!(",n," <= ",remaining(),")"); + } + function take(n) { + assertRemaining(n); + var s = str.substr(curIndex, n); + curIndex += n; + return s; + } + function peek(n) { + assertRemaining(n); + var s = str.substr(curIndex, n); + return s; + } + function skip(n) { + assertRemaining(n); + curIndex += n; + } + function remaining() { + return str.length - curIndex; + } + return {take:take, skip:skip, remaining:remaining, peek:peek}; +}; + +Changeset.stringAssembler = function() { + var pieces = []; + function append(x) { + pieces.push(String(x)); + } + function toString() { + return pieces.join(''); + } + return {append: append, toString: toString}; +}; + +// "lines" need not be an array as long as it supports certain calls (lines_foo inside). +Changeset.textLinesMutator = function(lines) { + // Mutates lines, an array of strings, in place. + // Mutation operations have the same constraints as changeset operations + // with respect to newlines, but not the other additional constraints + // (i.e. ins/del ordering, forbidden no-ops, non-mergeability, final newline). + // Can be used to mutate lists of strings where the last char of each string + // is not actually a newline, but for the purposes of N and L values, + // the caller should pretend it is, and for things to work right in that case, the input + // to insert() should be a single line with no newlines. + + var curSplice = [0,0]; + var inSplice = false; + // position in document after curSplice is applied: + var curLine = 0, curCol = 0; + // invariant: if (inSplice) then (curLine is in curSplice[0] + curSplice.length - {2,3}) && + // curLine >= curSplice[0] + // invariant: if (inSplice && (curLine >= curSplice[0] + curSplice.length - 2)) then + // curCol == 0 + + function lines_applySplice(s) { + lines.splice.apply(lines, s); + } + function lines_toSource() { + return lines.toSource(); + } + function lines_get(idx) { + if (lines.get) { + return lines.get(idx); + } + else { + return lines[idx]; + } + } + // can be unimplemented if removeLines's return value not needed + function lines_slice(start, end) { + if (lines.slice) { + return lines.slice(start, end); + } + else { + return []; + } + } + function lines_length() { + if ((typeof lines.length) == "number") { + return lines.length; + } + else { + return lines.length(); + } + } + + function enterSplice() { + curSplice[0] = curLine; + curSplice[1] = 0; + if (curCol > 0) { + putCurLineInSplice(); + } + inSplice = true; + } + function leaveSplice() { + lines_applySplice(curSplice); + curSplice.length = 2; + curSplice[0] = curSplice[1] = 0; + inSplice = false; + } + function isCurLineInSplice() { + return (curLine - curSplice[0] < (curSplice.length - 2)); + } + function debugPrint(typ) { + print(typ+": "+curSplice.toSource()+" / "+curLine+","+curCol+" / "+lines_toSource()); + } + function putCurLineInSplice() { + if (! isCurLineInSplice()) { + curSplice.push(lines_get(curSplice[0] + curSplice[1])); + curSplice[1]++; + } + return 2 + curLine - curSplice[0]; + } + + function skipLines(L, includeInSplice) { + if (L) { + if (includeInSplice) { + if (! inSplice) { + enterSplice(); + } + for(var i=0;i 1) { + leaveSplice(); + } + else { + putCurLineInSplice(); + } + } + curLine += L; + curCol = 0; + } + //print(inSplice+" / "+isCurLineInSplice()+" / "+curSplice[0]+" / "+curSplice[1]+" / "+lines.length); + /*if (inSplice && (! isCurLineInSplice()) && (curSplice[0] + curSplice[1] < lines.length)) { + print("BLAH"); + putCurLineInSplice(); + }*/ // tests case foo in remove(), which isn't otherwise covered in current impl + } + //debugPrint("skip"); + } + + function skip(N, L, includeInSplice) { + if (N) { + if (L) { + skipLines(L, includeInSplice); + } + else { + if (includeInSplice && ! inSplice) { + enterSplice(); + } + if (inSplice) { + putCurLineInSplice(); + } + curCol += N; + //debugPrint("skip"); + } + } + } + + function removeLines(L) { + var removed = ''; + if (L) { + if (! inSplice) { + enterSplice(); + } + function nextKLinesText(k) { + var m = curSplice[0] + curSplice[1]; + return lines_slice(m, m+k).join(''); + } + if (isCurLineInSplice()) { + //print(curCol); + if (curCol == 0) { + removed = curSplice[curSplice.length-1]; + // print("FOO"); // case foo + curSplice.length--; + removed += nextKLinesText(L-1); + curSplice[1] += L-1; + } + else { + removed = nextKLinesText(L-1); + curSplice[1] += L-1; + var sline = curSplice.length - 1; + removed = curSplice[sline].substring(curCol) + removed; + curSplice[sline] = curSplice[sline].substring(0, curCol) + + lines_get(curSplice[0] + curSplice[1]); + curSplice[1] += 1; + } + } + else { + removed = nextKLinesText(L); + curSplice[1] += L; + } + //debugPrint("remove"); + } + return removed; + } + + function remove(N, L) { + var removed = ''; + if (N) { + if (L) { + return removeLines(L); + } + else { + if (! inSplice) { + enterSplice(); + } + var sline = putCurLineInSplice(); + removed = curSplice[sline].substring(curCol, curCol+N); + curSplice[sline] = curSplice[sline].substring(0, curCol) + + curSplice[sline].substring(curCol+N); + //debugPrint("remove"); + } + } + return removed; + } + + function insert(text, L) { + if (text) { + if (! inSplice) { + enterSplice(); + } + if (L) { + var newLines = Changeset.splitTextLines(text); + if (isCurLineInSplice()) { + //if (curCol == 0) { + //curSplice.length--; + //curSplice[1]--; + //Array.prototype.push.apply(curSplice, newLines); + //curLine += newLines.length; + //} + //else { + var sline = curSplice.length - 1; + var theLine = curSplice[sline]; + var lineCol = curCol; + curSplice[sline] = theLine.substring(0, lineCol) + newLines[0]; + curLine++; + newLines.splice(0, 1); + Array.prototype.push.apply(curSplice, newLines); + curLine += newLines.length; + curSplice.push(theLine.substring(lineCol)); + curCol = 0; + //} + } + else { + Array.prototype.push.apply(curSplice, newLines); + curLine += newLines.length; + } + } + else { + var sline = putCurLineInSplice(); + curSplice[sline] = curSplice[sline].substring(0, curCol) + + text + curSplice[sline].substring(curCol); + curCol += text.length; + } + //debugPrint("insert"); + } + } + + function hasMore() { + //print(lines.length+" / "+inSplice+" / "+(curSplice.length - 2)+" / "+curSplice[1]); + var docLines = lines_length(); + if (inSplice) { + docLines += curSplice.length - 2 - curSplice[1]; + } + return curLine < docLines; + } + + function close() { + if (inSplice) { + leaveSplice(); + } + //debugPrint("close"); + } + + var self = {skip:skip, remove:remove, insert:insert, close:close, hasMore:hasMore, + removeLines:removeLines, skipLines: skipLines}; + return self; +}; + +Changeset.applyZip = function(in1, idx1, in2, idx2, func) { + var iter1 = Changeset.opIterator(in1, idx1); + var iter2 = Changeset.opIterator(in2, idx2); + var assem = Changeset.smartOpAssembler(); + var op1 = Changeset.newOp(); + var op2 = Changeset.newOp(); + var opOut = Changeset.newOp(); + while (op1.opcode || iter1.hasNext() || op2.opcode || iter2.hasNext()) { + if ((! op1.opcode) && iter1.hasNext()) iter1.next(op1); + if ((! op2.opcode) && iter2.hasNext()) iter2.next(op2); + func(op1, op2, opOut); + if (opOut.opcode) { + //print(opOut.toSource()); + assem.append(opOut); + opOut.opcode = ''; + } + } + assem.endDocument(); + return assem.toString(); +}; + +Changeset.unpack = function(cs) { + var headerRegex = /Z:([0-9a-z]+)([><])([0-9a-z]+)|/; + var headerMatch = headerRegex.exec(cs); + if ((! headerMatch) || (! headerMatch[0])) { + Changeset.error("Not a changeset: "+cs); + } + var oldLen = Changeset.parseNum(headerMatch[1]); + var changeSign = (headerMatch[2] == '>') ? 1 : -1; + var changeMag = Changeset.parseNum(headerMatch[3]); + var newLen = oldLen + changeSign*changeMag; + var opsStart = headerMatch[0].length; + var opsEnd = cs.indexOf("$"); + if (opsEnd < 0) opsEnd = cs.length; + return {oldLen: oldLen, newLen: newLen, ops: cs.substring(opsStart, opsEnd), + charBank: cs.substring(opsEnd+1)}; +}; + +Changeset.pack = function(oldLen, newLen, opsStr, bank) { + var lenDiff = newLen - oldLen; + var lenDiffStr = (lenDiff >= 0 ? + '>'+Changeset.numToString(lenDiff) : + '<'+Changeset.numToString(-lenDiff)); + var a = []; + a.push('Z:', Changeset.numToString(oldLen), lenDiffStr, opsStr, '$', bank); + return a.join(''); +}; + +Changeset.applyToText = function(cs, str) { + var unpacked = Changeset.unpack(cs); + Changeset.assert(str.length == unpacked.oldLen, + "mismatched apply: ",str.length," / ",unpacked.oldLen); + var csIter = Changeset.opIterator(unpacked.ops); + var bankIter = Changeset.stringIterator(unpacked.charBank); + var strIter = Changeset.stringIterator(str); + var assem = Changeset.stringAssembler(); + while (csIter.hasNext()) { + var op = csIter.next(); + switch(op.opcode) { + case '+': assem.append(bankIter.take(op.chars)); break; + case '-': strIter.skip(op.chars); break; + case '=': assem.append(strIter.take(op.chars)); break; + } + } + assem.append(strIter.take(strIter.remaining())); + return assem.toString(); +}; + +Changeset.mutateTextLines = function(cs, lines) { + var unpacked = Changeset.unpack(cs); + var csIter = Changeset.opIterator(unpacked.ops); + var bankIter = Changeset.stringIterator(unpacked.charBank); + var mut = Changeset.textLinesMutator(lines); + while (csIter.hasNext()) { + var op = csIter.next(); + switch(op.opcode) { + case '+': mut.insert(bankIter.take(op.chars), op.lines); break; + case '-': mut.remove(op.chars, op.lines); break; + case '=': mut.skip(op.chars, op.lines, (!! op.attribs)); break; + } + } + mut.close(); +}; + +Changeset.composeAttributes = function(att1, att2, resultIsMutation, pool) { + // att1 and att2 are strings like "*3*f*1c", asMutation is a boolean. + + // Sometimes attribute (key,value) pairs are treated as attribute presence + // information, while other times they are treated as operations that + // mutate a set of attributes, and this affects whether an empty value + // is a deletion or a change. + // Examples, of the form (att1Items, att2Items, resultIsMutation) -> result + // ([], [(bold, )], true) -> [(bold, )] + // ([], [(bold, )], false) -> [] + // ([], [(bold, true)], true) -> [(bold, true)] + // ([], [(bold, true)], false) -> [(bold, true)] + // ([(bold, true)], [(bold, )], true) -> [(bold, )] + // ([(bold, true)], [(bold, )], false) -> [] + + // pool can be null if att2 has no attributes. + + if ((! att1) && resultIsMutation) { + // In the case of a mutation (i.e. composing two changesets), + // an att2 composed with an empy att1 is just att2. If att1 + // is part of an attribution string, then att2 may remove + // attributes that are already gone, so don't do this optimization. + return att2; + } + if (! att2) return att1; + var atts = []; + att1.replace(/\*([0-9a-z]+)/g, function(_, a) { + atts.push(pool.getAttrib(Changeset.parseNum(a))); + return ''; + }); + att2.replace(/\*([0-9a-z]+)/g, function(_, a) { + var pair = pool.getAttrib(Changeset.parseNum(a)); + var found = false; + for(var i=0;i"); + + var unpacked = Changeset.unpack(cs); + var csIter = Changeset.opIterator(unpacked.ops); + var csBank = unpacked.charBank; + var csBankIndex = 0; + // treat the attribution lines as text lines, mutating a line at a time + var mut = Changeset.textLinesMutator(lines); + + var lineIter = null; + function isNextMutOp() { + return (lineIter && lineIter.hasNext()) || mut.hasMore(); + } + function nextMutOp(destOp) { + if ((!(lineIter && lineIter.hasNext())) && mut.hasMore()) { + var line = mut.removeLines(1); + lineIter = Changeset.opIterator(line); + } + if (lineIter && lineIter.hasNext()) { + lineIter.next(destOp); + } + else { + destOp.opcode = ''; + } + } + var lineAssem = null; + function outputMutOp(op) { + //print("outputMutOp: "+op.toSource()); + if (! lineAssem) { + lineAssem = Changeset.mergingOpAssembler(); + } + lineAssem.append(op); + if (op.lines > 0) { + Changeset.assert(op.lines == 1, "Can't have op.lines of ",op.lines," in attribution lines"); + // ship it to the mut + mut.insert(lineAssem.toString(), 1); + lineAssem = null; + } + } + + var csOp = Changeset.newOp(); + var attOp = Changeset.newOp(); + var opOut = Changeset.newOp(); + while (csOp.opcode || csIter.hasNext() || attOp.opcode || isNextMutOp()) { + if ((! csOp.opcode) && csIter.hasNext()) { + csIter.next(csOp); + } + //print(csOp.toSource()+" "+attOp.toSource()+" "+opOut.toSource()); + //print(csOp.opcode+"/"+csOp.lines+"/"+csOp.attribs+"/"+lineAssem+"/"+lineIter+"/"+(lineIter?lineIter.hasNext():null)); + //print("csOp: "+csOp.toSource()); + if ((! csOp.opcode) && (! attOp.opcode) && + (! lineAssem) && (! (lineIter && lineIter.hasNext()))) { + break; // done + } + else if (csOp.opcode == '=' && csOp.lines > 0 && (! csOp.attribs) && (! attOp.opcode) && + (! lineAssem) && (! (lineIter && lineIter.hasNext()))) { + // skip multiple lines; this is what makes small changes not order of the document size + mut.skipLines(csOp.lines); + //print("skipped: "+csOp.lines); + csOp.opcode = ''; + } + else if (csOp.opcode == '+') { + if (csOp.lines > 1) { + var firstLineLen = csBank.indexOf('\n', csBankIndex) + 1 - csBankIndex; + Changeset.copyOp(csOp, opOut); + csOp.chars -= firstLineLen; + csOp.lines--; + opOut.lines = 1; + opOut.chars = firstLineLen; + } + else { + Changeset.copyOp(csOp, opOut); + csOp.opcode = ''; + } + outputMutOp(opOut); + csBankIndex += opOut.chars; + opOut.opcode = ''; + } + else { + if ((! attOp.opcode) && isNextMutOp()) { + nextMutOp(attOp); + } + //print("attOp: "+attOp.toSource()); + Changeset._slicerZipperFunc(attOp, csOp, opOut, pool); + if (opOut.opcode) { + outputMutOp(opOut); + opOut.opcode = ''; + } + } + } + + Changeset.assert(! lineAssem, "line assembler not finished"); + mut.close(); + + //dmesg("-> "+lines.toSource()); +}; + +Changeset.joinAttributionLines = function(theAlines) { + var assem = Changeset.mergingOpAssembler(); + for(var i=0;i 0) { + lines.push(assem.toString()); + assem.clear(); + } + pos += op.chars; + } + + while (iter.hasNext()) { + var op = iter.next(); + var numChars = op.chars; + var numLines = op.lines; + while (numLines > 1) { + var newlineEnd = text.indexOf('\n', pos)+1; + Changeset.assert(newlineEnd > 0, "newlineEnd <= 0 in splitAttributionLines"); + op.chars = newlineEnd - pos; + op.lines = 1; + appendOp(op); + numChars -= op.chars; + numLines -= op.lines; + } + if (numLines == 1) { + op.chars = numChars; + op.lines = 1; + } + appendOp(op); + } + + return lines; +}; + +Changeset.splitTextLines = function(text) { + return text.match(/[^\n]*(?:\n|[^\n]$)/g); +}; + +Changeset.compose = function(cs1, cs2, pool) { + var unpacked1 = Changeset.unpack(cs1); + var unpacked2 = Changeset.unpack(cs2); + var len1 = unpacked1.oldLen; + var len2 = unpacked1.newLen; + Changeset.assert(len2 == unpacked2.oldLen, "mismatched composition"); + var len3 = unpacked2.newLen; + var bankIter1 = Changeset.stringIterator(unpacked1.charBank); + var bankIter2 = Changeset.stringIterator(unpacked2.charBank); + var bankAssem = Changeset.stringAssembler(); + + var newOps = Changeset.applyZip(unpacked1.ops, 0, unpacked2.ops, 0, function(op1, op2, opOut) { + //var debugBuilder = Changeset.stringAssembler(); + //debugBuilder.append(Changeset.opString(op1)); + //debugBuilder.append(','); + //debugBuilder.append(Changeset.opString(op2)); + //debugBuilder.append(' / '); + + var op1code = op1.opcode; + var op2code = op2.opcode; + if (op1code == '+' && op2code == '-') { + bankIter1.skip(Math.min(op1.chars, op2.chars)); + } + Changeset._slicerZipperFunc(op1, op2, opOut, pool); + if (opOut.opcode == '+') { + if (op2code == '+') { + bankAssem.append(bankIter2.take(opOut.chars)); + } + else { + bankAssem.append(bankIter1.take(opOut.chars)); + } + } + + //debugBuilder.append(Changeset.opString(op1)); + //debugBuilder.append(','); + //debugBuilder.append(Changeset.opString(op2)); + //debugBuilder.append(' -> '); + //debugBuilder.append(Changeset.opString(opOut)); + //print(debugBuilder.toString()); + }); + + return Changeset.pack(len1, len3, newOps, bankAssem.toString()); +}; + +Changeset.attributeTester = function(attribPair, pool) { + // returns a function that tests if a string of attributes + // (e.g. *3*4) contains a given attribute key,value that + // is already present in the pool. + if (! pool) { + return never; + } + var attribNum = pool.putAttrib(attribPair, true); + if (attribNum < 0) { + return never; + } + else { + var re = new RegExp('\\*'+Changeset.numToString(attribNum)+ + '(?!\\w)'); + return function(attribs) { + return re.test(attribs); + }; + } + function never(attribs) { return false; } +}; + +Changeset.identity = function(N) { + return Changeset.pack(N, N, "", ""); +}; + +Changeset.makeSplice = function(oldFullText, spliceStart, numRemoved, newText, optNewTextAPairs, pool) { + var oldLen = oldFullText.length; + + if (spliceStart >= oldLen) { + spliceStart = oldLen - 1; + } + if (numRemoved > oldFullText.length - spliceStart - 1) { + numRemoved = oldFullText.length - spliceStart - 1; + } + var oldText = oldFullText.substring(spliceStart, spliceStart+numRemoved); + var newLen = oldLen + newText.length - oldText.length; + + var assem = Changeset.smartOpAssembler(); + assem.appendOpWithText('=', oldFullText.substring(0, spliceStart)); + assem.appendOpWithText('-', oldText); + assem.appendOpWithText('+', newText, optNewTextAPairs, pool); + assem.endDocument(); + return Changeset.pack(oldLen, newLen, assem.toString(), newText); +}; + +Changeset.toSplices = function(cs) { + // get a list of splices, [startChar, endChar, newText] + + var unpacked = Changeset.unpack(cs); + var splices = []; + + var oldPos = 0; + var iter = Changeset.opIterator(unpacked.ops); + var charIter = Changeset.stringIterator(unpacked.charBank); + var inSplice = false; + while (iter.hasNext()) { + var op = iter.next(); + if (op.opcode == '=') { + oldPos += op.chars; + inSplice = false; + } + else { + if (! inSplice) { + splices.push([oldPos, oldPos, ""]); + inSplice = true; + } + if (op.opcode == '-') { + oldPos += op.chars; + splices[splices.length-1][1] += op.chars; + } + else if (op.opcode == '+') { + splices[splices.length-1][2] += charIter.take(op.chars); + } + } + } + + return splices; +}; + +Changeset.characterRangeFollow = function(cs, startChar, endChar, insertionsAfter) { + var newStartChar = startChar; + var newEndChar = endChar; + var splices = Changeset.toSplices(cs); + var lengthChangeSoFar = 0; + for(var i=0;i= newEndChar) { + // splice fully replaces/deletes range + // (also case that handles insertion at a collapsed selection) + if (insertionsAfter) { + newStartChar = newEndChar = spliceStart; + } + else { + newStartChar = newEndChar = spliceStart + newTextLength; + } + } + else if (spliceEnd <= newStartChar) { + // splice is before range + newStartChar += thisLengthChange; + newEndChar += thisLengthChange; + } + else if (spliceStart >= newEndChar) { + // splice is after range + } + else if (spliceStart >= newStartChar && spliceEnd <= newEndChar) { + // splice is inside range + newEndChar += thisLengthChange; + } + else if (spliceEnd < newEndChar) { + // splice overlaps beginning of range + newStartChar = spliceStart + newTextLength; + newEndChar += thisLengthChange; + } + else { + // splice overlaps end of range + newEndChar = spliceStart; + } + + lengthChangeSoFar += thisLengthChange; + } + + return [newStartChar, newEndChar]; +}; + +Changeset.moveOpsToNewPool = function(cs, oldPool, newPool) { + // works on changeset or attribution string + var dollarPos = cs.indexOf('$'); + if (dollarPos < 0) { + dollarPos = cs.length; + } + var upToDollar = cs.substring(0, dollarPos); + var fromDollar = cs.substring(dollarPos); + // order of attribs stays the same + return upToDollar.replace(/\*([0-9a-z]+)/g, function(_, a) { + var oldNum = Changeset.parseNum(a); + var pair = oldPool.getAttrib(oldNum); + var newNum = newPool.putAttrib(pair); + return '*'+Changeset.numToString(newNum); + }) + fromDollar; +}; + +Changeset.makeAttribution = function(text) { + var assem = Changeset.smartOpAssembler(); + assem.appendOpWithText('+', text); + return assem.toString(); +}; + +// callable on a changeset, attribution string, or attribs property of an op +Changeset.eachAttribNumber = function(cs, func) { + var dollarPos = cs.indexOf('$'); + if (dollarPos < 0) { + dollarPos = cs.length; + } + var upToDollar = cs.substring(0, dollarPos); + + upToDollar.replace(/\*([0-9a-z]+)/g, function(_, a) { + func(Changeset.parseNum(a)); + return ''; + }); +}; + +// callable on a changeset, attribution string, or attribs property of an op, +// though it may easily create adjacent ops that can be merged. +Changeset.filterAttribNumbers = function(cs, filter) { + return Changeset.mapAttribNumbers(cs, filter); +}; + +Changeset.mapAttribNumbers = function(cs, func) { + var dollarPos = cs.indexOf('$'); + if (dollarPos < 0) { + dollarPos = cs.length; + } + var upToDollar = cs.substring(0, dollarPos); + + var newUpToDollar = upToDollar.replace(/\*([0-9a-z]+)/g, function(s, a) { + var n = func(Changeset.parseNum(a)); + if (n === true) { + return s; + } + else if ((typeof n) === "number") { + return '*'+Changeset.numToString(n); + } + else { + return ''; + } + }); + + return newUpToDollar + cs.substring(dollarPos); +}; + +Changeset.makeAText = function(text, attribs) { + return { text: text, attribs: (attribs || Changeset.makeAttribution(text)) }; +}; + +Changeset.applyToAText = function(cs, atext, pool) { + return { text: Changeset.applyToText(cs, atext.text), + attribs: Changeset.applyToAttribution(cs, atext.attribs, pool) }; +}; + +Changeset.cloneAText = function(atext) { + return { text: atext.text, attribs: atext.attribs }; +}; + +Changeset.copyAText = function(atext1, atext2) { + atext2.text = atext1.text; + atext2.attribs = atext1.attribs; +}; + +Changeset.appendATextToAssembler = function(atext, assem) { + // intentionally skips last newline char of atext + var iter = Changeset.opIterator(atext.attribs); + var op = Changeset.newOp(); + while (iter.hasNext()) { + iter.next(op); + if (! iter.hasNext()) { + // last op, exclude final newline + if (op.lines <= 1) { + op.lines = 0; + op.chars--; + if (op.chars) { + assem.append(op); + } + } + else { + var nextToLastNewlineEnd = + atext.text.lastIndexOf('\n', atext.text.length-2) + 1; + var lastLineLength = atext.text.length - nextToLastNewlineEnd - 1; + op.lines--; + op.chars -= (lastLineLength + 1); + assem.append(op); + op.lines = 0; + op.chars = lastLineLength; + if (op.chars) { + assem.append(op); + } + } + } + else { + assem.append(op); + } + } +}; + +Changeset.prepareForWire = function(cs, pool) { + var newPool = new AttribPool(); + var newCs = Changeset.moveOpsToNewPool(cs, pool, newPool); + return {translated: newCs, pool: newPool}; +}; + +Changeset.isIdentity = function(cs) { + var unpacked = Changeset.unpack(cs); + return unpacked.ops == "" && unpacked.oldLen == unpacked.newLen; +}; + +Changeset.opAttributeValue = function(op, key, pool) { + return Changeset.attribsAttributeValue(op.attribs, key, pool); +}; + +Changeset.attribsAttributeValue = function(attribs, key, pool) { + var value = ''; + if (attribs) { + Changeset.eachAttribNumber(attribs, function(n) { + if (pool.getAttribKey(n) == key) { + value = pool.getAttribValue(n); + } + }); + } + return value; +}; + +Changeset.builder = function(oldLen) { + var assem = Changeset.smartOpAssembler(); + var o = Changeset.newOp(); + var charBank = Changeset.stringAssembler(); + + var self = { + // attribs are [[key1,value1],[key2,value2],...] or '*0*1...' (no pool needed in latter case) + keep: function(N, L, attribs, pool) { + o.opcode = '='; + o.attribs = (attribs && + Changeset.makeAttribsString('=', attribs, pool)) || ''; + o.chars = N; + o.lines = (L || 0); + assem.append(o); + return self; + }, + keepText: function(text, attribs, pool) { + assem.appendOpWithText('=', text, attribs, pool); + return self; + }, + insert: function(text, attribs, pool) { + assem.appendOpWithText('+', text, attribs, pool); + charBank.append(text); + return self; + }, + remove: function(N, L) { + o.opcode = '-'; + o.attribs = ''; + o.chars = N; + o.lines = (L || 0); + assem.append(o); + return self; + }, + toString: function() { + assem.endDocument(); + var newLen = oldLen + assem.getLengthChange(); + return Changeset.pack(oldLen, newLen, assem.toString(), + charBank.toString()); + } + }; + + return self; +}; + +Changeset.makeAttribsString = function(opcode, attribs, pool) { + // makeAttribsString(opcode, '*3') or makeAttribsString(opcode, [['foo','bar']], myPool) work + if (! attribs) { + return ''; + } + else if ((typeof attribs) == "string") { + return attribs; + } + else if (pool && attribs && attribs.length) { + if (attribs.length > 1) { + attribs = attribs.slice(); + attribs.sort(); + } + var result = []; + for(var i=0;i= attOp.chars && + attOp.lines > 0 && csOp.lines <= 0) { + csOp.lines++; + } + + Changeset._slicerZipperFunc(attOp, csOp, opOut, null); + if (opOut.opcode) { + assem.append(opOut); + opOut.opcode = ''; + } + } + } + } + + csOp.opcode = '-'; + csOp.chars = start; + + doCsOp(); + + if (optEnd === undefined) { + if (attOp.opcode) { + assem.append(attOp); + } + while (iter.hasNext()) { + iter.next(attOp); + assem.append(attOp); + } + } + else { + csOp.opcode = '='; + csOp.chars = optEnd - start; + doCsOp(); + } + + return assem.toString(); +}; + +Changeset.inverse = function(cs, lines, alines, pool) { + // lines and alines are what the changeset is meant to apply to. + // They may be arrays or objects with .get(i) and .length methods. + // They include final newlines on lines. + function lines_get(idx) { + if (lines.get) { + return lines.get(idx); + } + else { + return lines[idx]; + } + } + function lines_length() { + if ((typeof lines.length) == "number") { + return lines.length; + } + else { + return lines.length(); + } + } + function alines_get(idx) { + if (alines.get) { + return alines.get(idx); + } + else { + return alines[idx]; + } + } + function alines_length() { + if ((typeof alines.length) == "number") { + return alines.length; + } + else { + return alines.length(); + } + } + + var curLine = 0; + var curChar = 0; + var curLineOpIter = null; + var curLineOpIterLine; + var curLineNextOp = Changeset.newOp('+'); + + var unpacked = Changeset.unpack(cs); + var csIter = Changeset.opIterator(unpacked.ops); + var builder = Changeset.builder(unpacked.newLen); + + function consumeAttribRuns(numChars, func/*(len, attribs, endsLine)*/) { + + if ((! curLineOpIter) || (curLineOpIterLine != curLine)) { + // create curLineOpIter and advance it to curChar + curLineOpIter = Changeset.opIterator(alines_get(curLine)); + curLineOpIterLine = curLine; + var indexIntoLine = 0; + var done = false; + while (! done) { + curLineOpIter.next(curLineNextOp); + if (indexIntoLine + curLineNextOp.chars >= curChar) { + curLineNextOp.chars -= (curChar - indexIntoLine); + done = true; + } + else { + indexIntoLine += curLineNextOp.chars; + } + } + } + + while (numChars > 0) { + if ((! curLineNextOp.chars) && (! curLineOpIter.hasNext())) { + curLine++; + curChar = 0; + curLineOpIterLine = curLine; + curLineNextOp.chars = 0; + curLineOpIter = Changeset.opIterator(alines_get(curLine)); + } + if (! curLineNextOp.chars) { + curLineOpIter.next(curLineNextOp); + } + var charsToUse = Math.min(numChars, curLineNextOp.chars); + func(charsToUse, curLineNextOp.attribs, + charsToUse == curLineNextOp.chars && curLineNextOp.lines > 0); + numChars -= charsToUse; + curLineNextOp.chars -= charsToUse; + curChar += charsToUse; + } + + if ((! curLineNextOp.chars) && (! curLineOpIter.hasNext())) { + curLine++; + curChar = 0; + } + } + + function skip(N, L) { + if (L) { + curLine += L; + curChar = 0; + } + else { + if (curLineOpIter && curLineOpIterLine == curLine) { + consumeAttribRuns(N, function() {}); + } + else { + curChar += N; + } + } + } + + function nextText(numChars) { + var len = 0; + var assem = Changeset.stringAssembler(); + var firstString = lines_get(curLine).substring(curChar); + len += firstString.length; + assem.append(firstString); + + var lineNum = curLine+1; + while (len < numChars) { + var nextString = lines_get(lineNum); + len += nextString.length; + assem.append(nextString); + lineNum++; + } + + return assem.toString().substring(0, numChars); + } + + function cachedStrFunc(func) { + var cache = {}; + return function(s) { + if (! cache[s]) { + cache[s] = func(s); + } + return cache[s]; + }; + } + + var attribKeys = []; + var attribValues = []; + while (csIter.hasNext()) { + var csOp = csIter.next(); + if (csOp.opcode == '=') { + if (csOp.attribs) { + attribKeys.length = 0; + attribValues.length = 0; + Changeset.eachAttribNumber(csOp.attribs, function(n) { + attribKeys.push(pool.getAttribKey(n)); + attribValues.push(pool.getAttribValue(n)); + }); + var undoBackToAttribs = cachedStrFunc(function(attribs) { + var backAttribs = []; + for(var i=0;i 0) { + etherpad.betaSignupPageInit(); + } + + if ($('#productpage').size() > 0) { + etherpad.productPageInit(); + } + + if ($('.pricingpage').size() > 0) { + etherpad.pricingPageInit(); + } +}); + +etherpad = {}; + +//---------------------------------------------------------------- +// general utils +//---------------------------------------------------------------- + +etherpad.validEmail = function(x) { + return (x.length > 0 && + x.match(/^[\w\.\_\+\-]+\@[\w\_\-]+\.[\w\_\-\.]+$/)); +}; + +//---------------------------------------------------------------- +// obfuscating emails +//---------------------------------------------------------------- + +etherpad.deobfuscateEmails = function() { + $("a.obfuscemail").each(function() { + $(this).html($(this).html().replace('p*d.sp***e','pad.spline')); + this.href = this.href.replace('p*d.sp***e','pad.spline'); + }); +}; + +//---------------------------------------------------------------- +// Signing up for pricing info +//---------------------------------------------------------------- + +etherpad.pricingPageInit = function() { + $('#submitbutton').click(etherpad.pricingSubmit); +}; + +etherpad.pricingSubmit = function(edition) { + var allData = {}; + $('#pricingcontact input.ti').each(function() { + allData[$(this).attr('id')] = $(this).val(); + }); + allData.industry = $('#industry').val(); + + $('form button').hide(); + $('#spinner').show(); + $('form input').attr('disabled', true); + + $.ajax({ + type: 'post', + url: $('#pricingcontact').attr('action'), + data: allData, + success: success, + error: error + }); + + function success(responseText) { + $('#spinner').hide(); + if (responseText == "OK") { + $('#errorbox').hide(); + $('#confirmbox').fadeIn('fast'); + } else { + $('#confirmbox').hide(); + $('#errorbox').hide().html(responseText).fadeIn('fast'); + $('form button').show(); + $('form input').removeAttr('disabled'); + } + } + function error() { + $('#spinner').hide(); + $('#errorbox').hide().html("Server error.").fadeIn('fast'); + $('form button').show(); + $('form input').removeAttr('disabled'); + } + + return false; +} + + +//---------------------------------------------------------------- +// Product page (client-side nagivation with JS) +//---------------------------------------------------------------- + +etherpad.productPageInit = function() { + $("#productpage #tour").addClass("javascripton"); + etherpad.productPageNavigateTo(window.location.hash.substring(1)); + + $("#productpage a.tournav").click(etherpad.tourNavClick); +} + +etherpad.tourNavClick = function() { // to be called as a click event handler + var href = $(this).attr('href'); + var thorpLoc = href.indexOf('#'); + if (thorpLoc >= 0) { + etherpad.productPageNavigateTo(href.substring(thorpLoc+1), true); + } +} + +etherpad.productPageNavigateTo = function(hash, shouldAnimate) { + function setNavLink(rightOrLeft, text, linkhash) { + var navcells = $('#productpage .tourbar .'+rightOrLeft); + if (! text) { + navcells.html(' '); + } + else { + navcells. + html(''+text+''). + find('a.tournav').click(etherpad.tourNavClick); + } + } + function switchCardsIfNecessary(fromCard, toCard, andThen/*(didAnimate)*/) { + if (! $('#productpage #tour').hasClass("show"+toCard)) { + var afterAnimate = function() { + $("#productpage #"+fromCard).get(0).style.display = ""; + $('#productpage #tour').removeClass("show"+fromCard).addClass("show"+toCard); + if (andThen) andThen(shouldAnimate); + } + if (shouldAnimate) { + $("#productpage #"+fromCard).fadeOut("fast", afterAnimate); + } + else { + afterAnimate(); + } + } + else { + andThen(false); + } + } + function switchProseIfNecessary(toNum, useAnimation, andThen) { + var visibleProse = $("#productpage .tourprose:visible"); + var alreadyVisible = ($("#productpage #tour"+toNum+"prose:visible").size() > 0); + function assignVisibilities() { + $("#productpage .tourprose").each(function() { + if (this.id == "tour"+toNum+"prose") { + this.style.display = 'block'; + } + else { + this.style.display = 'none'; + } + }); + } + + if ((! useAnimation) || visibleProse.size() == 0 || alreadyVisible) { + assignVisibilities(); + andThen(); + } + else { + function afterAnimate() { + assignVisibilities(); + andThen(); + } + if (visibleProse.size() > 0 && visibleProse.get(0).id != "tour"+toNum+"prose") { + visibleProse.fadeOut("fast", afterAnimate); + } + else { + afterAnimate(); + } + } + } + function getProseTitle(n) { + if (n == 0) return clientVars.screenshotTitle; + var atag = $("#productpage #tourleftnav .tour"+n+" a"); + if (atag.size() > 0) return atag.text(); + return ''; + } + + var regexResult; + if ((regexResult = /^uses([1-9][0-9]*)$/.exec(hash))) { + var tourNum = +regexResult[1]; + switchCardsIfNecessary("pageshot", "usecases", function(didAnimate) { + switchProseIfNecessary(tourNum, shouldAnimate && !didAnimate, function() { + /*var n = tourNum; + setNavLink("left", "« "+getProseTitle(n-1), (n == 1 ? "" : "uses"+(n-1))); + var nextTitle = getProseTitle(n+1); + if (! nextTitle) setNavLink("right", ""); + else setNavLink("right", nextTitle+" »", "uses"+(n+1));*/ + /*setNavLink("left", "« "+getProseTitle(0), ""); + setNavLink("right", "");*/ + setNavLink("right", "« "+getProseTitle(0), ""); + $('#tourtop td.left').html("Use Cases"); + $("#productpage #tourleftnav li").removeClass("selected"); + $("#productpage #tourleftnav li.tour"+tourNum).addClass("selected"); + }); + }); + } + else { + switchCardsIfNecessary("usecases", "pageshot", function() { + $('#tourtop td.left').html(getProseTitle(0)); + setNavLink("right", clientVars.screenshotNextLink, "uses1"); + }); + } +} diff --git a/trunk/etherpad/src/static/js/jquery-1.2.6.js b/trunk/etherpad/src/static/js/jquery-1.2.6.js new file mode 100755 index 0000000..88e661e --- /dev/null +++ b/trunk/etherpad/src/static/js/jquery-1.2.6.js @@ -0,0 +1,3549 @@ +(function(){ +/* + * jQuery 1.2.6 - New Wave Javascript + * + * Copyright (c) 2008 John Resig (jquery.com) + * Dual licensed under the MIT (MIT-LICENSE.txt) + * and GPL (GPL-LICENSE.txt) licenses. + * + * $Date: 2008-05-24 14:22:17 -0400 (Sat, 24 May 2008) $ + * $Rev: 5685 $ + */ + +// Map over jQuery in case of overwrite +var _jQuery = window.jQuery, +// Map over the $ in case of overwrite + _$ = window.$; + +var jQuery = window.jQuery = window.$ = function( selector, context ) { + // The jQuery object is actually just the init constructor 'enhanced' + return new jQuery.fn.init( selector, context ); +}; + +// A simple way to check for HTML strings or ID strings +// (both of which we optimize for) +var quickExpr = /^[^<]*(<(.|\s)+>)[^>]*$|^#(\w+)$/, + +// Is it a simple selector + isSimple = /^.[^:#\[\.]*$/, + +// Will speed up references to undefined, and allows munging its name. + undefined; + +jQuery.fn = jQuery.prototype = { + init: function( selector, context ) { + // Make sure that a selection was provided + selector = selector || document; + + // Handle $(DOMElement) + if ( selector.nodeType ) { + this[0] = selector; + this.length = 1; + return this; + } + // Handle HTML strings + if ( typeof selector == "string" ) { + // Are we dealing with HTML string or an ID? + var match = quickExpr.exec( selector ); + + // Verify a match, and that no context was specified for #id + if ( match && (match[1] || !context) ) { + + // HANDLE: $(html) -> $(array) + if ( match[1] ) + selector = jQuery.clean( [ match[1] ], context ); + + // HANDLE: $("#id") + else { + var elem = document.getElementById( match[3] ); + + // Make sure an element was located + if ( elem ){ + // Handle the case where IE and Opera return items + // by name instead of ID + if ( elem.id != match[3] ) + return jQuery().find( selector ); + + // Otherwise, we inject the element directly into the jQuery object + return jQuery( elem ); + } + selector = []; + } + + // HANDLE: $(expr, [context]) + // (which is just equivalent to: $(content).find(expr) + } else + return jQuery( context ).find( selector ); + + // HANDLE: $(function) + // Shortcut for document ready + } else if ( jQuery.isFunction( selector ) ) + return jQuery( document )[ jQuery.fn.ready ? "ready" : "load" ]( selector ); + + return this.setArray(jQuery.makeArray(selector)); + }, + + // The current version of jQuery being used + jquery: "1.2.6", + + // The number of elements contained in the matched element set + size: function() { + return this.length; + }, + + // The number of elements contained in the matched element set + length: 0, + + // Get the Nth element in the matched element set OR + // Get the whole matched element set as a clean array + get: function( num ) { + return num == undefined ? + + // Return a 'clean' array + jQuery.makeArray( this ) : + + // Return just the object + this[ num ]; + }, + + // Take an array of elements and push it onto the stack + // (returning the new matched element set) + pushStack: function( elems ) { + // Build a new jQuery matched element set + var ret = jQuery( elems ); + + // Add the old object onto the stack (as a reference) + ret.prevObject = this; + + // Return the newly-formed element set + return ret; + }, + + // Force the current matched set of elements to become + // the specified array of elements (destroying the stack in the process) + // You should use pushStack() in order to do this, but maintain the stack + setArray: function( elems ) { + // Resetting the length to 0, then using the native Array push + // is a super-fast way to populate an object with array-like properties + this.length = 0; + Array.prototype.push.apply( this, elems ); + + return this; + }, + + // Execute a callback for every element in the matched set. + // (You can seed the arguments with an array of args, but this is + // only used internally.) + each: function( callback, args ) { + return jQuery.each( this, callback, args ); + }, + + // Determine the position of an element within + // the matched set of elements + index: function( elem ) { + var ret = -1; + + // Locate the position of the desired element + return jQuery.inArray( + // If it receives a jQuery object, the first element is used + elem && elem.jquery ? elem[0] : elem + , this ); + }, + + attr: function( name, value, type ) { + var options = name; + + // Look for the case where we're accessing a style value + if ( name.constructor == String ) + if ( value === undefined ) + return this[0] && jQuery[ type || "attr" ]( this[0], name ); + + else { + options = {}; + options[ name ] = value; + } + + // Check to see if we're setting style values + return this.each(function(i){ + // Set all the styles + for ( name in options ) + jQuery.attr( + type ? + this.style : + this, + name, jQuery.prop( this, options[ name ], type, i, name ) + ); + }); + }, + + css: function( key, value ) { + // ignore negative width and height values + if ( (key == 'width' || key == 'height') && parseFloat(value) < 0 ) + value = undefined; + return this.attr( key, value, "curCSS" ); + }, + + text: function( text ) { + if ( typeof text != "object" && text != null ) + return this.empty().append( (this[0] && this[0].ownerDocument || document).createTextNode( text ) ); + + var ret = ""; + + jQuery.each( text || this, function(){ + jQuery.each( this.childNodes, function(){ + if ( this.nodeType != 8 ) + ret += this.nodeType != 1 ? + this.nodeValue : + jQuery.fn.text( [ this ] ); + }); + }); + + return ret; + }, + + wrapAll: function( html ) { + if ( this[0] ) + // The elements to wrap the target around + jQuery( html, this[0].ownerDocument ) + .clone() + .insertBefore( this[0] ) + .map(function(){ + var elem = this; + + while ( elem.firstChild ) + elem = elem.firstChild; + + return elem; + }) + .append(this); + + return this; + }, + + wrapInner: function( html ) { + return this.each(function(){ + jQuery( this ).contents().wrapAll( html ); + }); + }, + + wrap: function( html ) { + return this.each(function(){ + jQuery( this ).wrapAll( html ); + }); + }, + + append: function() { + return this.domManip(arguments, true, false, function(elem){ + if (this.nodeType == 1) + this.appendChild( elem ); + }); + }, + + prepend: function() { + return this.domManip(arguments, true, true, function(elem){ + if (this.nodeType == 1) + this.insertBefore( elem, this.firstChild ); + }); + }, + + before: function() { + return this.domManip(arguments, false, false, function(elem){ + this.parentNode.insertBefore( elem, this ); + }); + }, + + after: function() { + return this.domManip(arguments, false, true, function(elem){ + this.parentNode.insertBefore( elem, this.nextSibling ); + }); + }, + + end: function() { + return this.prevObject || jQuery( [] ); + }, + + find: function( selector ) { + var elems = jQuery.map(this, function(elem){ + return jQuery.find( selector, elem ); + }); + + return this.pushStack( /[^+>] [^+>]/.test( selector ) || selector.indexOf("..") > -1 ? + jQuery.unique( elems ) : + elems ); + }, + + clone: function( events ) { + // Do the clone + var ret = this.map(function(){ + if ( jQuery.browser.msie && !jQuery.isXMLDoc(this) ) { + // IE copies events bound via attachEvent when + // using cloneNode. Calling detachEvent on the + // clone will also remove the events from the orignal + // In order to get around this, we use innerHTML. + // Unfortunately, this means some modifications to + // attributes in IE that are actually only stored + // as properties will not be copied (such as the + // the name attribute on an input). + var clone = this.cloneNode(true), + container = document.createElement("div"); + container.appendChild(clone); + return jQuery.clean([container.innerHTML])[0]; + } else + return this.cloneNode(true); + }); + + // Need to set the expando to null on the cloned set if it exists + // removeData doesn't work here, IE removes it from the original as well + // this is primarily for IE but the data expando shouldn't be copied over in any browser + var clone = ret.find("*").andSelf().each(function(){ + if ( this[ expando ] != undefined ) + this[ expando ] = null; + }); + + // Copy the events from the original to the clone + if ( events === true ) + this.find("*").andSelf().each(function(i){ + if (this.nodeType == 3) + return; + var events = jQuery.data( this, "events" ); + + for ( var type in events ) + for ( var handler in events[ type ] ) + jQuery.event.add( clone[ i ], type, events[ type ][ handler ], events[ type ][ handler ].data ); + }); + + // Return the cloned set + return ret; + }, + + filter: function( selector ) { + return this.pushStack( + jQuery.isFunction( selector ) && + jQuery.grep(this, function(elem, i){ + return selector.call( elem, i ); + }) || + + jQuery.multiFilter( selector, this ) ); + }, + + not: function( selector ) { + if ( selector.constructor == String ) + // test special case where just one selector is passed in + if ( isSimple.test( selector ) ) + return this.pushStack( jQuery.multiFilter( selector, this, true ) ); + else + selector = jQuery.multiFilter( selector, this ); + + var isArrayLike = selector.length && selector[selector.length - 1] !== undefined && !selector.nodeType; + return this.filter(function() { + return isArrayLike ? jQuery.inArray( this, selector ) < 0 : this != selector; + }); + }, + + add: function( selector ) { + return this.pushStack( jQuery.unique( jQuery.merge( + this.get(), + typeof selector == 'string' ? + jQuery( selector ) : + jQuery.makeArray( selector ) + ))); + }, + + is: function( selector ) { + return !!selector && jQuery.multiFilter( selector, this ).length > 0; + }, + + hasClass: function( selector ) { + return this.is( "." + selector ); + }, + + val: function( value ) { + if ( value == undefined ) { + + if ( this.length ) { + var elem = this[0]; + + // We need to handle select boxes special + if ( jQuery.nodeName( elem, "select" ) ) { + var index = elem.selectedIndex, + values = [], + options = elem.options, + one = elem.type == "select-one"; + + // Nothing was selected + if ( index < 0 ) + return null; + + // Loop through all the selected options + for ( var i = one ? index : 0, max = one ? index + 1 : options.length; i < max; i++ ) { + var option = options[ i ]; + + if ( option.selected ) { + // Get the specifc value for the option + value = jQuery.browser.msie && !option.attributes.value.specified ? option.text : option.value; + + // We don't need an array for one selects + if ( one ) + return value; + + // Multi-Selects return an array + values.push( value ); + } + } + + return values; + + // Everything else, we just grab the value + } else + return (this[0].value || "").replace(/\r/g, ""); + + } + + return undefined; + } + + if( value.constructor == Number ) + value += ''; + + return this.each(function(){ + if ( this.nodeType != 1 ) + return; + + if ( value.constructor == Array && /radio|checkbox/.test( this.type ) ) + this.checked = (jQuery.inArray(this.value, value) >= 0 || + jQuery.inArray(this.name, value) >= 0); + + else if ( jQuery.nodeName( this, "select" ) ) { + var values = jQuery.makeArray(value); + + jQuery( "option", this ).each(function(){ + this.selected = (jQuery.inArray( this.value, values ) >= 0 || + jQuery.inArray( this.text, values ) >= 0); + }); + + if ( !values.length ) + this.selectedIndex = -1; + + } else + this.value = value; + }); + }, + + html: function( value ) { + return value == undefined ? + (this[0] ? + this[0].innerHTML : + null) : + this.empty().append( value ); + }, + + replaceWith: function( value ) { + return this.after( value ).remove(); + }, + + eq: function( i ) { + return this.slice( i, i + 1 ); + }, + + slice: function() { + return this.pushStack( Array.prototype.slice.apply( this, arguments ) ); + }, + + map: function( callback ) { + return this.pushStack( jQuery.map(this, function(elem, i){ + return callback.call( elem, i, elem ); + })); + }, + + andSelf: function() { + return this.add( this.prevObject ); + }, + + data: function( key, value ){ + var parts = key.split("."); + parts[1] = parts[1] ? "." + parts[1] : ""; + + if ( value === undefined ) { + var data = this.triggerHandler("getData" + parts[1] + "!", [parts[0]]); + + if ( data === undefined && this.length ) + data = jQuery.data( this[0], key ); + + return data === undefined && parts[1] ? + this.data( parts[0] ) : + data; + } else + return this.trigger("setData" + parts[1] + "!", [parts[0], value]).each(function(){ + jQuery.data( this, key, value ); + }); + }, + + removeData: function( key ){ + return this.each(function(){ + jQuery.removeData( this, key ); + }); + }, + + domManip: function( args, table, reverse, callback ) { + var clone = this.length > 1, elems; + + return this.each(function(){ + if ( !elems ) { + elems = jQuery.clean( args, this.ownerDocument ); + + if ( reverse ) + elems.reverse(); + } + + var obj = this; + + if ( table && jQuery.nodeName( this, "table" ) && jQuery.nodeName( elems[0], "tr" ) ) + obj = this.getElementsByTagName("tbody")[0] || this.appendChild( this.ownerDocument.createElement("tbody") ); + + var scripts = jQuery( [] ); + + jQuery.each(elems, function(){ + var elem = clone ? + jQuery( this ).clone( true )[0] : + this; + + // execute all scripts after the elements have been injected + if ( jQuery.nodeName( elem, "script" ) ) + scripts = scripts.add( elem ); + else { + // Remove any inner scripts for later evaluation + if ( elem.nodeType == 1 ) + scripts = scripts.add( jQuery( "script", elem ).remove() ); + + // Inject the elements into the document + callback.call( obj, elem ); + } + }); + + scripts.each( evalScript ); + }); + } +}; + +// Give the init function the jQuery prototype for later instantiation +jQuery.fn.init.prototype = jQuery.fn; + +function evalScript( i, elem ) { + if ( elem.src ) + jQuery.ajax({ + url: elem.src, + async: false, + dataType: "script" + }); + + else + jQuery.globalEval( elem.text || elem.textContent || elem.innerHTML || "" ); + + if ( elem.parentNode ) + elem.parentNode.removeChild( elem ); +} + +function now(){ + return +new Date; +} + +jQuery.extend = jQuery.fn.extend = function() { + // copy reference to target object + var target = arguments[0] || {}, i = 1, length = arguments.length, deep = false, options; + + // Handle a deep copy situation + if ( target.constructor == Boolean ) { + deep = target; + target = arguments[1] || {}; + // skip the boolean and the target + i = 2; + } + + // Handle case when target is a string or something (possible in deep copy) + if ( typeof target != "object" && typeof target != "function" ) + target = {}; + + // extend jQuery itself if only one argument is passed + if ( length == i ) { + target = this; + --i; + } + + for ( ; i < length; i++ ) + // Only deal with non-null/undefined values + if ( (options = arguments[ i ]) != null ) + // Extend the base object + for ( var name in options ) { + var src = target[ name ], copy = options[ name ]; + + // Prevent never-ending loop + if ( target === copy ) + continue; + + // Recurse if we're merging object values + if ( deep && copy && typeof copy == "object" && !copy.nodeType ) + target[ name ] = jQuery.extend( deep, + // Never move original objects, clone them + src || ( copy.length != null ? [ ] : { } ) + , copy ); + + // Don't bring in undefined values + else if ( copy !== undefined ) + target[ name ] = copy; + + } + + // Return the modified object + return target; +}; + +var expando = "jQuery" + now(), uuid = 0, windowData = {}, + // exclude the following css properties to add px + exclude = /z-?index|font-?weight|opacity|zoom|line-?height/i, + // cache defaultView + defaultView = document.defaultView || {}; + +jQuery.extend({ + noConflict: function( deep ) { + window.$ = _$; + + if ( deep ) + window.jQuery = _jQuery; + + return jQuery; + }, + + // See test/unit/core.js for details concerning this function. + isFunction: function( fn ) { + return !!fn && typeof fn != "string" && !fn.nodeName && + fn.constructor != Array && /^[\s[]?function/.test( fn + "" ); + }, + + // check if an element is in a (or is an) XML document + isXMLDoc: function( elem ) { + return elem.documentElement && !elem.body || + elem.tagName && elem.ownerDocument && !elem.ownerDocument.body; + }, + + // Evalulates a script in a global context + globalEval: function( data ) { + data = jQuery.trim( data ); + + if ( data ) { + // Inspired by code by Andrea Giammarchi + // http://webreflection.blogspot.com/2007/08/global-scope-evaluation-and-dom.html + var head = document.getElementsByTagName("head")[0] || document.documentElement, + script = document.createElement("script"); + + script.type = "text/javascript"; + if ( jQuery.browser.msie ) + script.text = data; + else + script.appendChild( document.createTextNode( data ) ); + + // Use insertBefore instead of appendChild to circumvent an IE6 bug. + // This arises when a base node is used (#2709). + head.insertBefore( script, head.firstChild ); + head.removeChild( script ); + } + }, + + nodeName: function( elem, name ) { + return elem.nodeName && elem.nodeName.toUpperCase() == name.toUpperCase(); + }, + + cache: {}, + + data: function( elem, name, data ) { + elem = elem == window ? + windowData : + elem; + + var id = elem[ expando ]; + + // Compute a unique ID for the element + if ( !id ) + id = elem[ expando ] = ++uuid; + + // Only generate the data cache if we're + // trying to access or manipulate it + if ( name && !jQuery.cache[ id ] ) + jQuery.cache[ id ] = {}; + + // Prevent overriding the named cache with undefined values + if ( data !== undefined ) + jQuery.cache[ id ][ name ] = data; + + // Return the named cache data, or the ID for the element + return name ? + jQuery.cache[ id ][ name ] : + id; + }, + + removeData: function( elem, name ) { + elem = elem == window ? + windowData : + elem; + + var id = elem[ expando ]; + + // If we want to remove a specific section of the element's data + if ( name ) { + if ( jQuery.cache[ id ] ) { + // Remove the section of cache data + delete jQuery.cache[ id ][ name ]; + + // If we've removed all the data, remove the element's cache + name = ""; + + for ( name in jQuery.cache[ id ] ) + break; + + if ( !name ) + jQuery.removeData( elem ); + } + + // Otherwise, we want to remove all of the element's data + } else { + // Clean up the element expando + try { + delete elem[ expando ]; + } catch(e){ + // IE has trouble directly removing the expando + // but it's ok with using removeAttribute + if ( elem.removeAttribute ) + elem.removeAttribute( expando ); + } + + // Completely remove the data cache + delete jQuery.cache[ id ]; + } + }, + + // args is for internal usage only + each: function( object, callback, args ) { + var name, i = 0, length = object.length; + + if ( args ) { + if ( length == undefined ) { + for ( name in object ) + if ( callback.apply( object[ name ], args ) === false ) + break; + } else + for ( ; i < length; ) + if ( callback.apply( object[ i++ ], args ) === false ) + break; + + // A special, fast, case for the most common use of each + } else { + if ( length == undefined ) { + for ( name in object ) + if ( callback.call( object[ name ], name, object[ name ] ) === false ) + break; + } else + for ( var value = object[0]; + i < length && callback.call( value, i, value ) !== false; value = object[++i] ){} + } + + return object; + }, + + prop: function( elem, value, type, i, name ) { + // Handle executable functions + if ( jQuery.isFunction( value ) ) + value = value.call( elem, i ); + + // Handle passing in a number to a CSS property + return value && value.constructor == Number && type == "curCSS" && !exclude.test( name ) ? + value + "px" : + value; + }, + + className: { + // internal only, use addClass("class") + add: function( elem, classNames ) { + jQuery.each((classNames || "").split(/\s+/), function(i, className){ + if ( elem.nodeType == 1 && !jQuery.className.has( elem.className, className ) ) + elem.className += (elem.className ? " " : "") + className; + }); + }, + + // internal only, use removeClass("class") + remove: function( elem, classNames ) { + if (elem.nodeType == 1) + elem.className = classNames != undefined ? + jQuery.grep(elem.className.split(/\s+/), function(className){ + return !jQuery.className.has( classNames, className ); + }).join(" ") : + ""; + }, + + // internal only, use hasClass("class") + has: function( elem, className ) { + return jQuery.inArray( className, (elem.className || elem).toString().split(/\s+/) ) > -1; + } + }, + + // A method for quickly swapping in/out CSS properties to get correct calculations + swap: function( elem, options, callback ) { + var old = {}; + // Remember the old values, and insert the new ones + for ( var name in options ) { + old[ name ] = elem.style[ name ]; + elem.style[ name ] = options[ name ]; + } + + callback.call( elem ); + + // Revert the old values + for ( var name in options ) + elem.style[ name ] = old[ name ]; + }, + + css: function( elem, name, force ) { + if ( name == "width" || name == "height" ) { + var val, props = { position: "absolute", visibility: "hidden", display:"block" }, which = name == "width" ? [ "Left", "Right" ] : [ "Top", "Bottom" ]; + + function getWH() { + val = name == "width" ? elem.offsetWidth : elem.offsetHeight; + var padding = 0, border = 0; + jQuery.each( which, function() { + padding += parseFloat(jQuery.curCSS( elem, "padding" + this, true)) || 0; + border += parseFloat(jQuery.curCSS( elem, "border" + this + "Width", true)) || 0; + }); + val -= Math.round(padding + border); + } + + if ( jQuery(elem).is(":visible") ) + getWH(); + else + jQuery.swap( elem, props, getWH ); + + return Math.max(0, val); + } + + return jQuery.curCSS( elem, name, force ); + }, + + curCSS: function( elem, name, force ) { + var ret, style = elem.style; + + // A helper method for determining if an element's values are broken + function color( elem ) { + if ( !jQuery.browser.safari ) + return false; + + // defaultView is cached + var ret = defaultView.getComputedStyle( elem, null ); + return !ret || ret.getPropertyValue("color") == ""; + } + + // We need to handle opacity special in IE + if ( name == "opacity" && jQuery.browser.msie ) { + ret = jQuery.attr( style, "opacity" ); + + return ret == "" ? + "1" : + ret; + } + // Opera sometimes will give the wrong display answer, this fixes it, see #2037 + if ( jQuery.browser.opera && name == "display" ) { + var save = style.outline; + style.outline = "0 solid black"; + style.outline = save; + } + + // Make sure we're using the right name for getting the float value + if ( name.match( /float/i ) ) + name = styleFloat; + + if ( !force && style && style[ name ] ) + ret = style[ name ]; + + else if ( defaultView.getComputedStyle ) { + + // Only "float" is needed here + if ( name.match( /float/i ) ) + name = "float"; + + name = name.replace( /([A-Z])/g, "-$1" ).toLowerCase(); + + var computedStyle = defaultView.getComputedStyle( elem, null ); + + if ( computedStyle && !color( elem ) ) + ret = computedStyle.getPropertyValue( name ); + + // If the element isn't reporting its values properly in Safari + // then some display: none elements are involved + else { + var swap = [], stack = [], a = elem, i = 0; + + // Locate all of the parent display: none elements + for ( ; a && color(a); a = a.parentNode ) + stack.unshift(a); + + // Go through and make them visible, but in reverse + // (It would be better if we knew the exact display type that they had) + for ( ; i < stack.length; i++ ) + if ( color( stack[ i ] ) ) { + swap[ i ] = stack[ i ].style.display; + stack[ i ].style.display = "block"; + } + + // Since we flip the display style, we have to handle that + // one special, otherwise get the value + ret = name == "display" && swap[ stack.length - 1 ] != null ? + "none" : + ( computedStyle && computedStyle.getPropertyValue( name ) ) || ""; + + // Finally, revert the display styles back + for ( i = 0; i < swap.length; i++ ) + if ( swap[ i ] != null ) + stack[ i ].style.display = swap[ i ]; + } + + // We should always get a number back from opacity + if ( name == "opacity" && ret == "" ) + ret = "1"; + + } else if ( elem.currentStyle ) { + var camelCase = name.replace(/\-(\w)/g, function(all, letter){ + return letter.toUpperCase(); + }); + + ret = elem.currentStyle[ name ] || elem.currentStyle[ camelCase ]; + + // From the awesome hack by Dean Edwards + // http://erik.eae.net/archives/2007/07/27/18.54.15/#comment-102291 + + // If we're not dealing with a regular pixel number + // but a number that has a weird ending, we need to convert it to pixels + if ( !/^\d+(px)?$/i.test( ret ) && /^\d/.test( ret ) ) { + // Remember the original values + var left = style.left, rsLeft = elem.runtimeStyle.left; + + // Put in the new values to get a computed value out + elem.runtimeStyle.left = elem.currentStyle.left; + style.left = ret || 0; + ret = style.pixelLeft + "px"; + + // Revert the changed values + style.left = left; + elem.runtimeStyle.left = rsLeft; + } + } + + return ret; + }, + + clean: function( elems, context ) { + var ret = []; + context = context || document; + // !context.createElement fails in IE with an error but returns typeof 'object' + if (typeof context.createElement == 'undefined') + context = context.ownerDocument || context[0] && context[0].ownerDocument || document; + + jQuery.each(elems, function(i, elem){ + if ( !elem ) + return; + + if ( elem.constructor == Number ) + elem += ''; + + // Convert html string into DOM nodes + if ( typeof elem == "string" ) { + // Fix "XHTML"-style tags in all browsers + elem = elem.replace(/(<(\w+)[^>]*?)\/>/g, function(all, front, tag){ + return tag.match(/^(abbr|br|col|img|input|link|meta|param|hr|area|embed)$/i) ? + all : + front + ">"; + }); + + // Trim whitespace, otherwise indexOf won't work as expected + var tags = jQuery.trim( elem ).toLowerCase(), div = context.createElement("div"); + + var wrap = + // option or optgroup + !tags.indexOf("", "" ] || + + !tags.indexOf("", "" ] || + + tags.match(/^<(thead|tbody|tfoot|colg|cap)/) && + [ 1, "", "
" ] || + + !tags.indexOf("", "" ] || + + // matched above + (!tags.indexOf("", "" ] || + + !tags.indexOf("", "" ] || + + // IE can't serialize and