From eb49011caaa0dc5d57d27931c3f697ce7eafddc8 Mon Sep 17 00:00:00 2001 From: Matt Habel Date: Wed, 16 Nov 2011 20:30:02 -0500 Subject: [PATCH 1/6] Added a copy url button to the smoke.js message --- lightwrite/.local_settings.py.swp | Bin 12288 -> 0 bytes lightwrite/.urls.py.swp | Bin 12288 -> 0 bytes lightwrite/local_settings.py | 6 +-- lightwrite/settings.py | 5 ++- lightwrite/templates/.light.html.swp | Bin 12288 -> 16384 bytes lightwrite/templates/light.html | 57 ++++++++++++++++++++++----- lightwrite/urls.py | 6 +-- static/clippy.swf | Bin 5380 -> 0 bytes 8 files changed, 57 insertions(+), 17 deletions(-) delete mode 100644 lightwrite/.local_settings.py.swp delete mode 100644 lightwrite/.urls.py.swp delete mode 100644 static/clippy.swf diff --git a/lightwrite/.local_settings.py.swp b/lightwrite/.local_settings.py.swp deleted file mode 100644 index ab1a835d2326403bf9a5ead60b88b941b1cac72b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 12288 zcmeI&zfZzI6bJB!F>e0e9L$M{g#v?t}2Lcd)00bZa0SG_<0ucBo0^HBgt3Jz8dY+ZE z&;01qDLM#100Izz00bZa0SG_<0uX=z1Qt-heIPnmC%V&-{QsYR|9|TFhmJQLj*fdB zOnF9N;y00Peg5XKu`TcSDFuq#ldL(y#T}Gvk?W_7cV2)fYRvd_$};99J0oe7*DZ z*YbPz;XGrI0VFctm_G)`LusR|E45Q@j_KPXU~}J^Lm7cFUAhVvscvAOb{y2oM1xKm>>Y5g-C* zng9$J*gLG?Tv^3Z`COQJmap_60z`la5CI}U1c(3;AOb{y2oM1xKm^VpfiPz5$3?~- zEMoHb|9|!S|J!B8KA}FMQq*JAI%*Ad4Rrza{Ssq+)CTG&`hP`zL5)yt)I(GrcN;~6 z2oM1xKm>>Y5g-CYfCvx)BJdv&s56dZh2y>DnhjosajJAPXmF*YB#ULuF9?UXoJD@M zxn6IS4hK3iX(}~v7)Y+=5%5H5$-!``!)}5zT=(uRcG4lSiKY(<;=@q)jfji}tGdE_ zqK)(C2LC#^NEq#k)4MV;e6p0hI1LvD<#Mv)y^N zxA*+b1Z>%f*~E&-1C!y+MN34O zfr*ui%t+c=9hZC7r2Ow5aFq^?g~9_(PG~udjR)_hm{0e8CTgz=SrK5f2EN-Omc1}b Qz*Xi|4U_M(k@tiB2Fqj`p#T5? diff --git a/lightwrite/local_settings.py b/lightwrite/local_settings.py index 06e2d0f..3506be1 100644 --- a/lightwrite/local_settings.py +++ b/lightwrite/local_settings.py @@ -1,6 +1,6 @@ -MEDIA_ROOT = '/home/tuttle/Projects/LightWrite/static' -SITE_ROOT = '/home/tuttle/Projects/LightWrite/' +MEDIA_ROOT = '/home/matt/LightWrite/static' +SITE_ROOT = '/home/matt/LightWrite/' STATICFILES_DIRS = ( - '/home/tuttle/Projects/LightWrite/static/', + '/home/matt/LightWrite/static/', ) diff --git a/lightwrite/settings.py b/lightwrite/settings.py index 059c161..03c25b2 100644 --- a/lightwrite/settings.py +++ b/lightwrite/settings.py @@ -6,7 +6,7 @@ TEMPLATE_DEBUG = DEBUG ADMINS = ( - # ('Your Name', 'your_email@example.com'), + # ('Matt Habel', 'habelinc@gmail.com'), ) MANAGERS = ADMINS @@ -14,7 +14,7 @@ DATABASES = { 'default': { 'ENGINE': 'django.db.backends.sqlite3', # Add 'postgresql_psycopg2', 'mysql', 'sqlite3' or 'oracle'. - 'NAME': 'text_db', # Or path to database file if using sqlite3. + 'NAME': '/home/matt/LightWrite/lightwrite/text_db', # Or path to database file if using sqlite3. 'USER': '', # Not used with sqlite3. 'PASSWORD': '', # Not used with sqlite3. 'HOST': '', # Set to empty string for localhost. Not used with sqlite3. @@ -163,3 +163,4 @@ except: pass +REDIR = 'w' diff --git a/lightwrite/templates/.light.html.swp b/lightwrite/templates/.light.html.swp index a8c824fd8918572d6ff60a5d8cc3ffa2e245b33b..3f2592b853e78e1bc39ea2b175aab2139c92a969 100644 GIT binary patch literal 16384 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 RM9t!XBP36D`E1fL!Y}d1r6m9W diff --git a/lightwrite/templates/light.html b/lightwrite/templates/light.html index 69a39f0..7bd8c97 100644 --- a/lightwrite/templates/light.html +++ b/lightwrite/templates/light.html @@ -4,25 +4,60 @@ + + + + + + + @@ -111,7 +149,7 @@
- +
@@ -121,5 +159,6 @@ + diff --git a/lightwrite/urls.py b/lightwrite/urls.py index 1e93464..fca2fe2 100644 --- a/lightwrite/urls.py +++ b/lightwrite/urls.py @@ -8,9 +8,9 @@ urlpatterns = patterns('', # Examples: # url(r'^$', 'lightwrite.views.home', name='home'), - url(r'^(?P[a-zA-Z0-9_.-]+)$', 'lightwrite.texts.views.write'), - url(r'^t/(?P[a-zA-Z0-9_.-]+)/$', 'lightwrite.texts.views.json_get_text'), - url(r'^a/about/$', 'lightwrite.texts.views.about'), + url(r'^w/(?P[a-zA-Z0-9_.-]+)$', 'lightwrite.texts.views.write'), + url(r'^w/t/(?P[a-zA-Z0-9_.-]+)/$', 'lightwrite.texts.views.json_get_text'), + url(r'^w/a/about/$', 'lightwrite.texts.views.about'), url(r'^static/(?P.*)$', 'django.views.static.serve', {'document_root':settings.MEDIA_ROOT}), url(r'^$', 'lightwrite.texts.views.root'), # Uncomment the admin/doc line below to enable admin documentation: diff --git a/static/clippy.swf b/static/clippy.swf deleted file mode 100644 index e46886cd1153122af2f216a6a86cbd816615d54d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5380 zcmV+f75nN#S5pc08vp=!+LTy%SX4*0zjgcet=@ocKrjm0DA0h7;D)H64M+njAhL)H z(A#ZpYcJS+X~pQ+A|i-O)EJXE#4VG=F`C867bgadCKG+5Q5v30MxzYP*OoT}T)C=@|a)CMSsny!*SJ54I3DT=1Vp;Rcf>>nGq zezbVblEJ6?!piPkmoyvxvS{1E`3oM)X+Qm5$2&(iI5P(Ss6U}z%3S%3mtVj9-eGgv zxeMV-$~Rv=;dwT#_uQ-(<2%cn4K*vK9QQ0a)OGLb%Bfj*vd&NHEIBprVAYX@hsr*7 zWL#>3~URn2?0!|g9L-&oX{wBGP!)AfDdXZ~21_x`vw|BfC0-Tutb zZDsM-{P%uMSlf^}YvI8Im%cO%tINq2!rs2rvL?FxW4Y}=hfI5CJM-i+)LDXGtKM*A z{@nc)uYP%~<%`c^8_w+5B9!iay6DD&zpl^SLp{a$`SHs3>1_uZo7KMBA$i|SQ`(@^)cW)n_6j`_P#Id*5Z@yi0$1Xem{B{1#D_>kY z{WZOsTJpxBYVD2BBR2l@TmFhWX@+fXv*W_LuRD`+_dM~%w$9m+`3rlVSS2d%{o-ty zVQ}lOABxwUP*0B8RMz+Gkx%sdzMYoUlk;E4sc3Kt5tS5!DU<`AK`A2-Egd`W^|Ri^ zzCP)Yfaf6UII94}BB1~Ph6yUdho%@QyKdQjVhERrg!J2ZeNsFl$`!<=D7{;7M!p#adDLswZgZV zKaIA2aO10UO`d7jA`-V137Ii>mUq3Yp3-@4oAvNt?QdRDZ9Y}DzoNC7`|zzZpZ@&y zx69sH5_8Wq?AALg-#$KZy<*(Pu=Dk*yXTFrQL;TJb0YKC-`?8lZB`r1#$lgU4*i4m zn~!&W_HNzA)koaY$7deC9Qv=gGh_3YZrpUX=wGM0ul#lGyKi*7bo{xKMnm}gh9MX3 zWc8%Eaw{v>-yYJrH>of?=2Y1i?4Q5+Z1>AG@1OWiAv+uCE=^P}_YSQ~kZ#>{dq~Z} zs@|hxR@A?ex6*@tIjivA7?pIhC&@C;lCkaH4^7cq3R{loFWED0P1@;S{KO8;tG_G@ zAG@ny-(At(=XF~L2}f(X*Ov9$f{gDqSJ+cD(=D*68!M=c}26 z9}oXfd3@ZOvwCIB&b+C+F718&J%83%%_qAGCRk5R{5IpaACrE)wRU#LA5UHRbW-<; zFOwo=^DC-;g6Ped(EiPoi4Bpv@*e+S{l2@lAGRLmv%6aUaveQ)^Np8YzP)8q(--59 zMIPF-{Vkt$#jtOx?3csl#by8T2FF*V`cF3smq_pCFd%oJ+`|tJhyV{rUYyW3Mn=rY! z`lE<^)zvQPUnZvQje5GJu=B);=i0&!W<=(%)}Hy?d$cfdTg!#6Ir|ysxA9XCUHSI6 z6HIMd_3p2Z<#si-&G^&aKlR>HZz)t({q*-w#}4k(hVJ#A-h6&fVP}5cQ+GbO=~A$w zAAVW6K|k{AX&`aY);llg*3@)~op%#2((<;JT_5LLXC6)7K4bL@Hikwg!`J-~@}a%z z`ps2kzvM3Wp0td;n>FnGk*>s-|7OqV6HVALa!k;dr2W1md6X~VhkZ%>OH#y*7^xki=-QnwB$9qJuWwE6a=H0$Bhl; zf>Ge4M7ba$ss)gOx51tsA=n8D&UryikF3}Q%<>7A6qi<(=hs!v?kDgxc?8bEmIoRI zNS!yJg4k{}adr%<**HraYYk|k1W^NgX4znYlXJ_0{7S3x=ScfuWd-9f+MM!SmrJNK zWtb=G^533;zpZYjzYGTtJlXcDvkC*hUB-QG=@iH#$AM%_^{V&RH+;4Cgi4r9nxYoDkwPdTsS!$qHBH zoLLfmqti@y%AhlcTha)2W??hvNv$3b%K;}P7TiWNC(Z*F9@^-^U;sO3bV};#Y#z?p z=m@QQU;&Qk?qa6)hfYyklgQvYzEi0eE?r-!k+fYicSjg9t)CqbWj zPFzlESpd(qSp;6Zl+>#G(V5c-=CUp4m|6My3W>45r*H&9z)2#{!X`Nz?e=7e)n@02 zi=fFeqD;^p^kg-Xv2ajkvSq+Qc+OVO3-Z98g#nD~f=Ubm@yi;GcAFJ~ByjKnmuqPB z@aS=*7O8>RO0)pgNUQ@6lr?~+f~6Xr4Q`hJkx*ABCCDW-HE?2&-3A6DNrffOZRS`w zOwKK^K{JaWeTj^2x5Ne~ZG>ow2BXe)yBdI`smPNL&I9A1sLae8-FYqxmm`SGW+P)Z z+U;Txw%#eJD4ktL3?$YSL#&G6;8i901vwQ(Rrz&ACHkV0qKbK{*`?)0zZ;R*JbH5c zoIDCeiJ~M?VNr2W@lj(X8PLz6k#qyXh{iO7kr*QuBaB5-jAR(eF;ZX@f>9`Dl$cRr z6p7IwjG{1##%M4`k70TUMnf@*!6+7^VHgd^NR7oKFdB*31dI|f(qNQ~Q3^(*Fw$a_ ziqU9{(lAQLXbi^VFdC21I4qfnQ6|Qduw*huQ!vWHl58xQiqW*8Ae|1&axu!ovgsJ* zV^)t5{1;$Uh*1$nGccNo(JYLLF)G2R6rgoqjHQYFsj6;3ZuCgRbw;{qxl#u zz-S>xH5k=mRELoPBO^v8jLaBWFyb(>VpNY2kC7cC2S!eeTo^TAv;-p$Mgm5SnD%0{ z6vK_cG-0$HqsK8?fzcl@@*yl)1EmEdUkjxb$~v%W8;rFB-U?+KlqaEVhw>DZ9Z;Tz z@(h$`q3ne6M<|_8o`bRr%5Eroq3nb5Jd{5{c>(F*LZ<#7g+^#7wD+s~Qz@j8Q#6ex z$tekp&`2HxC_qBXVMs$wg>M!lPto+Rl0V=;qm&d%LOx{fGYmWo2Bvj^iNJ!C3aB&y zQ3a_|$li#iWQ0^hIBB3pI!&NU2e^;{P5-V)uIcAT2fD}vP(juOR?CT0MEL)uKhjn7 zSCm{7kd%Bzi6}80ctUH)lZJ&lj4INIsKMeqqTqC*NoJAYRC*A8cLNy z9m~u@)bN>vrkGSEh*B?r@i;00m?l%}5OgNP<_x@@WGG&RV<;w_N~FX(sz8Ot&Q{Um3@Xuhvx=EuREaYhRqVt$DxA4Y zC7Cn@!BP#_0Erkxi4nsfBtc>Z(OHrt28mdPW{Mb*cm~6;rHmLaU|2~4gQe>bBa!Lg z>lFS90;d`T;5$eZ+MRAO(CG%cnu_H`1%c0x;IwD}h<{IqVtJ+@@U#q0vjaf#dpbIn z7sIH6Y%|CZYmk)=Lx$nnBwl71Zcvwok|iNzk~IuZsXoN1LAC1(70wSCEVTS@rq^3k6)NtYkG7@I80V_(Op%vZfh6HP3IJi>* zjH$>RTa&C$rV1%4TqH%}SBNcAE~cxS&8)grZkG796ZBf-OZBB*s-k?UW=7rIY!)kX zfMd<*UYJZnKDmB0B7Q3)ThovUAH9Z{O{)Pk-%a1WJz520~PhL6>nZ)Ym2nN0o zWE9nF9q);!qTlH2i>Ewhtc(YqCdP!V6MS+XY<&_F>PQhqshbN;Vw1!=f$VLdA;QAD(`)nmd|vJJ9)5alelMS2Kq9?=#n4Bv z8#XXGTtp*U3F~Lp&a}=<@mzR^pXmp_YC5=xjMf%gix0wBEC@?SJ;bPXrk{t|9=;ej zjTC_@QbU5jM?ahP0(m^JMsgU?BK;iNCx@W~M555|0hmY!>{sd6SEA;NHB~+ODij_( zq#l^o5c}bpxqkgzqGl4|6=tY5RO{zajsCs*`G_zXF`!1=BXk@~){OC6^L?pmUn)5w zzcmlU2-I5JZl63br(G0qKIm!}?+!>gjus_B1B3U%K_QsPlNr1g;)ILQd*`96g|aLjnx)HHL&LimwH+CeT5%=#7+5;pf9( zD1(@8sk$}fB3b97FAT7%Aif_+AcTRnMsJ~fA-<4{Jz6)S+Tht82r9-vw5>HU+SLd~9-J|;VlxVax_${%d~GiwBxA(LkTgkltoQK{fMOym zF_tnKLY9z~x~cy`t|46#;3yPAJ-OHFF^R3hD_+$HeSKiKOmQeedqgC~FzVJ+vzSzD zJY~jkZW1yq)tF__mqSsIen^eiulEA)OT9!7&>%hX@8GK>bp$dK>xY#}IY}a{Nn*mo zN|&Os60Eund4h#`v35PIHcJz|gfXlFfyR40X1TJGtidO-$E<)fqv+2+AtqTkWDX6G z6Rswyc2UrVQh*)E6hch4q2G$85J*lv1C|`1!zTHleXzaksc=PrLkD`mV&el`sN4k8 zj5agU1&6okzLApP2K_01gGugb5oS%Ptzd4^kk-$#7 z1r;hGGHT@h8FCW9lSt&#B(sbeh}jepvy$%gZvAqq874+SMy2J@_s3H`r7OsFuN8?A zJ+V6-PLBZvE_PeTH(yf5fbcyhX^)xdh8#Yj*&hkM0WcnwuAmbOdwK_5>+911$I&D% zWrkG-9|FBe3QL2V8ihl@c9mfj$#%w7e&7HzsgU_aLxNX$JVh?C!6c zLW=gmgEy601y4*W9Rik)g>=(`y8ZgKh;DvF3QGpz#Xa|L!b|saQ+E+%NVPUKU+UGR z@Q?TEM)50qbz1%py}DF>HR{!FN1D=RME7cU41lKxz|J6mSBBi$WL<-r9RZ|E=hvWM zhViR?bR@}9KAPM|ejg3d%9Ux*-tbW3HP(9V9>ljIC0wg; zqa`cZ{%e@Xy-@ATj1ZG#RJxEVK<(&Fbd)@STM&8kO&K`R$&bjwQ%Sm$)^s4hz5@|Y zm=?_JRerD*bhAl!9%S~4W@{U2qEau!ZZB-Z Date: Wed, 16 Nov 2011 20:39:27 -0500 Subject: [PATCH 2/6] Added a copy url button to smoke.js popup --- lightwrite/__init__.pyc | Bin 0 -> 145 bytes lightwrite/local_settings.pyc | Bin 0 -> 342 bytes lightwrite/settings.pyc | Bin 0 -> 3214 bytes lightwrite/text_db | Bin 0 -> 34816 bytes lightwrite/texts/__init__.pyc | Bin 0 -> 137 bytes lightwrite/texts/models.pyc | Bin 0 -> 1379 bytes lightwrite/texts/views.pyc | Bin 0 -> 3128 bytes lightwrite/urls.pyc | Bin 0 -> 755 bytes static/ZeroClipboard.js | 311 +++++++++++++++++++++++++++++ static/ZeroClipboard.swf | Bin 0 -> 1071 bytes static/copyButtons/button_down.png | Bin 0 -> 1912 bytes static/copyButtons/button_over.png | Bin 0 -> 1978 bytes static/copyButtons/button_up.png | Bin 0 -> 2086 bytes 13 files changed, 311 insertions(+) create mode 100644 lightwrite/__init__.pyc create mode 100644 lightwrite/local_settings.pyc create mode 100644 lightwrite/settings.pyc create mode 100644 lightwrite/text_db create mode 100644 lightwrite/texts/__init__.pyc create mode 100644 lightwrite/texts/models.pyc create mode 100644 lightwrite/texts/views.pyc create mode 100644 lightwrite/urls.pyc create mode 100755 static/ZeroClipboard.js create mode 100755 static/ZeroClipboard.swf create mode 100644 static/copyButtons/button_down.png create mode 100644 static/copyButtons/button_over.png create mode 100644 static/copyButtons/button_up.png diff --git a/lightwrite/__init__.pyc b/lightwrite/__init__.pyc new file mode 100644 index 0000000000000000000000000000000000000000..baeea948312d08aed413b1dc93841e3947fef79f GIT binary patch literal 145 zcmZSn%**xi-66kZ1}I1X8Urt0S=mXzrG zWTt17gcoI&r0VB@nB`!mo*ptUK0Y%qvm`!Vub{Go1E}35H$SB`C)EyQNih&J002lT BAx{7R literal 0 HcmV?d00001 diff --git a/lightwrite/local_settings.pyc b/lightwrite/local_settings.pyc new file mode 100644 index 0000000000000000000000000000000000000000..e652db67e821a9701a11da2820fdd866d73f5833 GIT binary patch literal 342 zcmZSn%*!SA^^jjO0~9a6mD*fYcx!V>`TLL5Upo!vZrT!Z6XJcEKYfMN^?qSy$?#qQJ`khjXg s-pa{OPRxlfPAw_P%u6rUE2u2t0BWmD50A1o&j{pDw literal 0 HcmV?d00001 diff --git a/lightwrite/settings.pyc b/lightwrite/settings.pyc new file mode 100644 index 0000000000000000000000000000000000000000..3560f6614e05986362e982c32ebc7f09f6edc317 GIT binary patch literal 3214 zcmeHJTXWk)6h87T_oSqyEp4F$lH!&|PMb7Iq3u+)<zWKuvJB3gbTBW+1waGNq8yjxxC~?koE0FKz_|ouADj<>JO*bK$YpRY1NjP^ zD?kBGKZMh(CW4P25_FY3oC>8KsA z`#p^aQ`zgl=X9Hwa9cMI8m7+5xU8JSA+3ZS=M}^6pYY=Zr7D3~p2;PrZ@Ei4ynw={ z*3>!9AgLo;xA-hlhnj64x2&4vzHHfTxj1ZDZ7$9Vp*?RHaJGVLEu@Lx^(xg99Q!dV zB9BI!Lxzari4xW-jCm@)`EkV5jJlojGK!h3GICv(^wcU2 z-}>|{BYgqv-jJVUU1&(t2%k4T^Ek@rUJzo4;dp&~&KcLul$TKy$836j)nO7acKQ8$ zMIh|v`+R{12E@+?X!+Xv`z*zTu`3tsVeMR~G>$x5oD<;XahFGei*gVJ$7JEW!Ly8@ z@aw{p&%91RUHaB%+>iQh5cm7I&u&k{7;-;gc*y!{)e8bq`B(@Xg>ooUzS|WgHomL4 zmeq&#yl9sN+mxe>p{Bn$I!H;elZZ|Ma$xsy^`}jPQ7(dH>fl^@(aSwS#HynrIbz z==s4*FTz4dq(V3F7~>15Aa-2YPneA2B$Z;apaw}i@cLM*vipo|i_j?JGMo|YQ*7>W zfza6$p|U{x-{@4S<4lE)yTd=)cgo_7{@-rKEw(Jq=zpcZSmK>gUc-TlLmD&rqHZTc zYAp(;c;mM9=AogrbyxNP`MIFgnhn#I#nRMF?LfC|Su8cJt-a7}J*C=>rtUf|Q|C)) z#?Z`zBNTP3t(qR%|RSqq^-gw0?O{D4#L$}>p17jEMCRI(D^@dp!IZ2ax)zaJU zH~M!{cY=n|(xi;|3>tX+L?U+@`;p8IU(b;jQkjnHieB!z5{8MsbS#2wHfl9PKh`XS z#=s9JL{DHZGIlYMYRjz4=YWW}HN((ru6B56%N|yrG)1FzfM0M2QZR_IkGkWID+MhC z(aLlrv=4u?afdM(2K1TeaqI^i77Hb%lq(fVxxA8BW+vD2g5cpTu41Vq$9!oH6r>6` p&aM~n0fxX%BM|Dt8V&|=vOj>6 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 Pu0QFyPVefT#(VpJ^!|~U literal 0 HcmV?d00001 diff --git a/lightwrite/texts/__init__.pyc b/lightwrite/texts/__init__.pyc new file mode 100644 index 0000000000000000000000000000000000000000..bc68fa2385a966377e792a73fafc83dba6ff498f GIT binary patch literal 137 zcmZSn%**xi-66kZ1}I1X8Urt0S=mXzrG zWTt17gcoI&r0VB@nB`z*Noqw&v3`7fW?p7Ve7s&kWeEpRn@w(hN@-529mw!vAZ7pn DHM<_M literal 0 HcmV?d00001 diff --git a/lightwrite/texts/models.pyc b/lightwrite/texts/models.pyc new file mode 100644 index 0000000000000000000000000000000000000000..342cc93478baa0289035d8e38754ebd62a8b1a58 GIT binary patch literal 1379 zcmb_c&2AGh5FYPlH))}?Pzkkn4tr{N0EAGBdZIzvA|Y~FIkEFs?=GqxS|o1t$#@$s zTzCNZW*j!03rRfjjOX{8vD2S>yWf9&8%=5RN%8**%g;azeu^AXt!S)BF`tl2s7`5| zMm{CiqdKE;2EIpD(JH5zB9qY_(O04m<35?3Y)Y$44*K1}fXsj{iyeeo{=%nF*o7RV zZjE(5@)`J9dtGl>*1q85bI3vu+&g<4x&m1H6wAK`vBY`XgjVUM802qzNGn0UEYHcL zQKFD1OOVt?M~!!=yev3G*afNeZRKn;4~ykPmT{ab+au*_e19?{2Z_^9&A!OYCkzthbp?|Ab&N7ku2F@8}uLg z!cnM-P&Js!5@GAx*gNx3%qk@<>b5T+(DZM7+8n!^1^LRkQK;?6 z6jr;-ZwW%3q@|8srQXEsLsK~Y(zyos%tVPU+a6fQbEQ7erPY;yw+i)(v9@lqrZRF7 z@_p_4W_Jj~eN*8VU10}4jcH+dr{-8btQmpF(=1ZMnz(BVdH^G zV=b(8C1P{)FdW%9P5YTS)MXqYOMLc8x}Um99G?;5+1DX^6N(ZwmV^HGX?G`F#W2N}cSk}QSW&4X zQLxd0wgJQfy3WAmnOndxt{O={Ev$s3%)y@1C2AgS z>LPrfbr?D9Liiz=ko#LGNCrcKbFR=)o7KWAO!yR}D4eY2CU&m4=H2CNSHRehLCBl; zmb^vK1uyWf_<{T`VXXYCkT?A|uxB>~_P_w4iJ?IO>OlS}&TA()_XXz>tDRK=Uqt^fJa!Ck;klx6KE-eTp3WGs-atp6M(`$5PIy(|)xU z>>jBv$3-VKL2xQosa26W)VmwI=!%JoGgD|~_LMZa(3o6psMOtHEx;%it8#$q$c#$` zIE>K;tvXDZbt)>3RFWdCQOwY>ogmmTYHalxU)I%dY@GsTOQ!%;^yoG9gBhzhDpYO` zbY(j?ybMF$Myp-p9Nd9#JQ_v&;tQ9?#1-I7nIcO$fKs8~8a8j>IYYgp#1lXt_V&hE zX5&(8-Y?M;hem*#RZni+T4w{-uid_Ld+Y8KmG1EdH%g5#;HrAs{T@+0E{5i44QB}l z*Ml7$<&)zT;0~=R!mCJ+*B76@_ceF%H9POg>>E#lod5t>DeI z9YR8H)k=7s)fkvb$Y@c5mT*Ms+Bpj*=#&2=KphV;<=evsUhli{s4MLEQ zF4~nlYg>fTEsmpeE*dun0y!LybjvqtG5I3xWCwRH>l-#xQ zQkcv*odfVrhrBYZfjD+?G8>yxcgAG~#F&g!FcR!$XBLBdv-A?egMpF61A7Gwr6K|-aNmZS^sX(I}83? zL*j$5F%QZur~*g=5L$rpLHnS#Kn1YyoZkV}UHjXh9BG@tnLGfs zYe9<+BwbLC;ZwNBN{YWcLZ3a_W^83{N+E|^JtU5$hb=3VOTNY(MOiP^kpZ_}u?%NEcjEdYz;4)0d@&!vj;E0-K^~9_M zFHsV8bE9csqb6@FT~pc^L+DwiAwJ=0!-*~IBDBS(2jsb_uOt^4rP5bfTN1{MfY{bN zwxnb)&`OB~$F65R-u!U>_T6b3UtWH87$#YFG2|%R8$9A=G&PluD(-Xi-nQh6ZAo;m jHInk-%1OHZ -1) { + classes.splice( idx, 1 ); + this.className = classes.join(' '); + } + return this; + }; + thingy.hasClass = function(name) { + return !!this.className.match( new RegExp("\\s*" + name + "\\s*") ); + }; + } + return thingy; + }, + + setMoviePath: function(path) { + // set path to ZeroClipboard.swf + this.moviePath = path; + }, + + dispatch: function(id, eventName, args) { + // receive event from flash movie, send to client + var client = this.clients[id]; + if (client) { + client.receiveEvent(eventName, args); + } + }, + + register: function(id, client) { + // register new client to receive events + this.clients[id] = client; + }, + + getDOMObjectPosition: function(obj, stopObj) { + // get absolute coordinates for dom element + var info = { + left: 0, + top: 0, + width: obj.width ? obj.width : obj.offsetWidth, + height: obj.height ? obj.height : obj.offsetHeight + }; + + while (obj && (obj != stopObj)) { + info.left += obj.offsetLeft; + info.top += obj.offsetTop; + obj = obj.offsetParent; + } + + return info; + }, + + Client: function(elem) { + // constructor for new simple upload client + this.handlers = {}; + + // unique ID + this.id = ZeroClipboard.nextId++; + this.movieId = 'ZeroClipboardMovie_' + this.id; + + // register client with singleton to receive flash events + ZeroClipboard.register(this.id, this); + + // create movie + if (elem) this.glue(elem); + } +}; + +ZeroClipboard.Client.prototype = { + + id: 0, // unique ID for us + ready: false, // whether movie is ready to receive events or not + movie: null, // reference to movie object + clipText: '', // text to copy to clipboard + handCursorEnabled: true, // whether to show hand cursor, or default pointer cursor + cssEffects: true, // enable CSS mouse effects on dom container + handlers: null, // user event handlers + + glue: function(elem, appendElem, stylesToAdd) { + // glue to DOM element + // elem can be ID or actual DOM element object + this.domElement = ZeroClipboard.$(elem); + + // float just above object, or zIndex 99 if dom element isn't set + var zIndex = 99; + if (this.domElement.style.zIndex) { + zIndex = parseInt(this.domElement.style.zIndex, 10) + 1; + } + + if (typeof(appendElem) == 'string') { + appendElem = ZeroClipboard.$(appendElem); + } + else if (typeof(appendElem) == 'undefined') { + appendElem = document.getElementsByTagName('body')[0]; + } + + // find X/Y position of domElement + var box = ZeroClipboard.getDOMObjectPosition(this.domElement, appendElem); + + // create floating DIV above element + this.div = document.createElement('div'); + var style = this.div.style; + style.position = 'absolute'; + style.left = '' + box.left + 'px'; + style.top = '' + box.top + 'px'; + style.width = '' + box.width + 'px'; + style.height = '' + box.height + 'px'; + style.zIndex = zIndex; + + if (typeof(stylesToAdd) == 'object') { + for (addedStyle in stylesToAdd) { + style[addedStyle] = stylesToAdd[addedStyle]; + } + } + + // style.backgroundColor = '#f00'; // debug + + appendElem.appendChild(this.div); + + this.div.innerHTML = this.getHTML( box.width, box.height ); + }, + + getHTML: function(width, height) { + // return HTML for movie + var html = ''; + var flashvars = 'id=' + this.id + + '&width=' + width + + '&height=' + height; + + if (navigator.userAgent.match(/MSIE/)) { + // IE gets an OBJECT tag + var protocol = location.href.match(/^https/i) ? 'https://' : 'http://'; + html += ''; + } + else { + // all other browsers get an EMBED tag + html += ''; + } + return html; + }, + + hide: function() { + // temporarily hide floater offscreen + if (this.div) { + this.div.style.left = '-2000px'; + } + }, + + show: function() { + // show ourselves after a call to hide() + this.reposition(); + }, + + destroy: function() { + // destroy control and floater + if (this.domElement && this.div) { + this.hide(); + this.div.innerHTML = ''; + + var body = document.getElementsByTagName('body')[0]; + try { body.removeChild( this.div ); } catch(e) {;} + + this.domElement = null; + this.div = null; + } + }, + + reposition: function(elem) { + // reposition our floating div, optionally to new container + // warning: container CANNOT change size, only position + if (elem) { + this.domElement = ZeroClipboard.$(elem); + if (!this.domElement) this.hide(); + } + + if (this.domElement && this.div) { + var box = ZeroClipboard.getDOMObjectPosition(this.domElement); + var style = this.div.style; + style.left = '' + box.left + 'px'; + style.top = '' + box.top + 'px'; + } + }, + + setText: function(newText) { + // set text to be copied to clipboard + this.clipText = newText; + if (this.ready) this.movie.setText(newText); + }, + + addEventListener: function(eventName, func) { + // add user event listener for event + // event types: load, queueStart, fileStart, fileComplete, queueComplete, progress, error, cancel + eventName = eventName.toString().toLowerCase().replace(/^on/, ''); + if (!this.handlers[eventName]) this.handlers[eventName] = []; + this.handlers[eventName].push(func); + }, + + setHandCursor: function(enabled) { + // enable hand cursor (true), or default arrow cursor (false) + this.handCursorEnabled = enabled; + if (this.ready) this.movie.setHandCursor(enabled); + }, + + setCSSEffects: function(enabled) { + // enable or disable CSS effects on DOM container + this.cssEffects = !!enabled; + }, + + receiveEvent: function(eventName, args) { + // receive event from flash + eventName = eventName.toString().toLowerCase().replace(/^on/, ''); + + // special behavior for certain events + switch (eventName) { + case 'load': + // movie claims it is ready, but in IE this isn't always the case... + // bug fix: Cannot extend EMBED DOM elements in Firefox, must use traditional function + this.movie = document.getElementById(this.movieId); + if (!this.movie) { + var self = this; + setTimeout( function() { self.receiveEvent('load', null); }, 1 ); + return; + } + + // firefox on pc needs a "kick" in order to set these in certain cases + if (!this.ready && navigator.userAgent.match(/Firefox/) && navigator.userAgent.match(/Windows/)) { + var self = this; + setTimeout( function() { self.receiveEvent('load', null); }, 100 ); + this.ready = true; + return; + } + + this.ready = true; + this.movie.setText( this.clipText ); + this.movie.setHandCursor( this.handCursorEnabled ); + break; + + case 'mouseover': + if (this.domElement && this.cssEffects) { + this.domElement.addClass('hover'); + if (this.recoverActive) this.domElement.addClass('active'); + } + break; + + case 'mouseout': + if (this.domElement && this.cssEffects) { + this.recoverActive = false; + if (this.domElement.hasClass('active')) { + this.domElement.removeClass('active'); + this.recoverActive = true; + } + this.domElement.removeClass('hover'); + } + break; + + case 'mousedown': + if (this.domElement && this.cssEffects) { + this.domElement.addClass('active'); + } + break; + + case 'mouseup': + if (this.domElement && this.cssEffects) { + this.domElement.removeClass('active'); + this.recoverActive = false; + } + break; + } // switch eventName + + if (this.handlers[eventName]) { + for (var idx = 0, len = this.handlers[eventName].length; idx < len; idx++) { + var func = this.handlers[eventName][idx]; + + if (typeof(func) == 'function') { + // actual function reference + func(this, args); + } + else if ((typeof(func) == 'object') && (func.length == 2)) { + // PHP style object + method, i.e. [myObject, 'myMethod'] + func[0][ func[1] ](this, args); + } + else if (typeof(func) == 'string') { + // name of function + window[func](this, args); + } + } // foreach event handler defined + } // user defined handler for event + } + +}; diff --git a/static/ZeroClipboard.swf b/static/ZeroClipboard.swf new file mode 100755 index 0000000000000000000000000000000000000000..13bf8e396202964e0048333d878f4b949a2f5e6a GIT binary patch literal 1071 zcmV+~1kn3KS5pay1^@tfoPAa6Qrkup-d$aeB-A-xFjKf1te)pFM-&Q&_dOT zp~-XxqP4X~YJ}vGWC;KAD1C=MKwiO_PG6^Vbs@z~r#qgr-}!Xr?4IxJ9P1kT4dpSa zmlT9hja*+}e;Cbih*6`(JT|+I(1(#NIVSiTL~Dq=|Lb=d5tOYL`L;_#dyQQ%FAAmI zcth~a_gzLk@xphk!Y?fFYp&C2`ZTZ#X}INt9hY9ojZWZ1Om23g$oC2%i(XLAs&#|V z5ArS7X}yhomj%SJGT~|rnZj|zM|I&j59e1QKqGxQN5!(ijWrx1S)ZN!RwWBwC`$uYc z!)028S7F4?l?H2dd39HKImh$+mv#S~I-YjmQ;P-rUfUM~-;Xr+ldpAXK+hS!b|@Ro zUs)@fv!kf9RjpFXZ?d(Pe_q{bY*sgP{Ykaib==7Da_N!X$Z^AwK5e&BZ5R56j>T=;_5DD$nR8}GiWShym;5A&x*eM;)Us-}<67Eb+@9n>sdlhm z`(coON!$a6H-ML=9U8}t-8aV1yD!xY9v@|7-FWq*lEUMka&b=Hq$X{>72}4eNl_P+ zccPJWGtXb!r#GbVPIO$}sN%oME%Yf<`b@|2f6G5y#$}-l zAR|D=L6`ti0Wt|N4P*v{Ss-&j?gE(yvY_TMkQE@SK-Pd%f#~WwXExMLZXW@84CD#m zFMxar!IU~i}ZGSTvX;GX_!`A@yKkIbSu*e=l_b9m*BF@hOB8SS;p?XkU4 z+#Y{FagI+_hF#pQ*y^c#B7H9*TQ=n-IvJZOQ*KYMV&e{u!2((~XOiIAy*Zr0yBr$x zqA6D~T{u}ZWn+;Cn@jC`refSD34E}PZ{YGaxq%P2g&VlCEyl30qM2Z<#-M2CQxMno zG_4J8H7mc8(VenQzJ;=@j=BiTh*RubMeS$61ORcM^S6!u6l;=?s|@ py1A~K8@jovn~!u;;=k8uI$3rc`gC{*rT-s&a~N%N=5J58nk1s|4c7nw literal 0 HcmV?d00001 diff --git a/static/copyButtons/button_down.png b/static/copyButtons/button_down.png new file mode 100644 index 0000000000000000000000000000000000000000..f50823ffff24e3a736a5631a6cba7a76b26b6e66 GIT binary patch literal 1912 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 QfB*mh07*qoM6N<$g71>(9{>OV literal 0 HcmV?d00001 From 5e2cc73500e093d293696a7be8e70253f4d28b1b Mon Sep 17 00:00:00 2001 From: Matt Habel Date: Wed, 16 Nov 2011 20:56:45 -0500 Subject: [PATCH 3/6] Added a guide to deploy your own lightwrite server --- DEPLOYING | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) create mode 100644 DEPLOYING diff --git a/DEPLOYING b/DEPLOYING new file mode 100644 index 0000000..24fffd5 --- /dev/null +++ b/DEPLOYING @@ -0,0 +1,18 @@ +Here is a quick guide on how to deploy your very own LightWrite server! + +First off, you have to get all the needed things. You will need Python 2.7 and django, just google search em +You will also need sqlite3, so do a quick apt-get || yum install || whatever the hell your package manager is sqlite3 + +Now, you will need to configure a few things. +In the directory lightwrite, which you should've gotten from the git pull, there is a file named local_settings.py. Open that. + +All you have to do here is change the paths to work with your machine. Here are some templates. + +MEDIA_ROOT = '/path/to/top/dir/of/this/project/static' +SITE_ROOT = '/path/to/top/dir/of/this/project' +STATICFILES_DIR = ('/path/to/top/dir/of/this/project/static') + +And that should be that! Now all you have to do is from the terminal, change directory to /path/to/top/dir/of/this/project/lightwrite/ and then type ./run.sh! +If you have any problems with this, just try and figure it out. It shouldn't be that hard. + +If you see something I missed, please do add on to this file. From 9fce2eacba4ef49003e60f263c68bdfb7554ad24 Mon Sep 17 00:00:00 2001 From: Matt Habel Date: Wed, 16 Nov 2011 21:04:25 -0500 Subject: [PATCH 4/6] made it easier for deploy by automatically formatting the url patterns with redir variable --- lightwrite/urls.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/lightwrite/urls.py b/lightwrite/urls.py index fca2fe2..4266bd3 100644 --- a/lightwrite/urls.py +++ b/lightwrite/urls.py @@ -8,9 +8,9 @@ urlpatterns = patterns('', # Examples: # url(r'^$', 'lightwrite.views.home', name='home'), - url(r'^w/(?P[a-zA-Z0-9_.-]+)$', 'lightwrite.texts.views.write'), - url(r'^w/t/(?P[a-zA-Z0-9_.-]+)/$', 'lightwrite.texts.views.json_get_text'), - url(r'^w/a/about/$', 'lightwrite.texts.views.about'), + url(r'^%s/(?P[a-zA-Z0-9_.-]+)$' % (settings.REDIR), 'lightwrite.texts.views.write'), + url(r'^%s/t/(?P[a-zA-Z0-9_.-]+)/$' % (settings.REDIR), 'lightwrite.texts.views.json_get_text'), + url(r'^%s/a/about/$' % (settings.REDIR), 'lightwrite.texts.views.about'), url(r'^static/(?P.*)$', 'django.views.static.serve', {'document_root':settings.MEDIA_ROOT}), url(r'^$', 'lightwrite.texts.views.root'), # Uncomment the admin/doc line below to enable admin documentation: From 065c2e2cc91ac847384def9a9e65e17b75d97ef5 Mon Sep 17 00:00:00 2001 From: Matt Habel Date: Wed, 16 Nov 2011 23:15:53 -0500 Subject: [PATCH 5/6] changed {{wash}} to http://gun.io/w/{{wash}} --- lightwrite/templates/light.html | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lightwrite/templates/light.html b/lightwrite/templates/light.html index 7bd8c97..3efc9d6 100644 --- a/lightwrite/templates/light.html +++ b/lightwrite/templates/light.html @@ -43,7 +43,7 @@ @@ -149,7 +145,7 @@
- +
diff --git a/lightwrite/text_db b/lightwrite/text_db index 4946998a6cb5352fb27387cf1fa980c0bf061af7..a9574dc2f742cd0a242eb9174bbff9d1be79d386 100644 GIT binary patch delta 204 zcmZpez|^pSX@WHCN(Kf7m5B=Wj4L-LED7ghX8s5iU{GQH&HRn|<7PpgN6hTXTtE>e zj?KTLIW>4#7}A)SRG17UW=KkY{Y;uPDw)%FRwIG}(Nxp^0(xuU0lD z9$uhECWadfOgRiUCN`b{D&~SHHcu!oy(J%nVk{%aFncQq|1H5XCWZo-ex`(BL@L;)x$^ITayH{gR0v zr6vb3>Im~f1rqfWlk!VT^i_&wCNW7(Ucp$w$T?Y&$&Hg0s36GI#WQGf8dEEWFe3;` GG6DeB5GP## delta 167 zcmbQr_L)_h`7