From ac1cc954ae080dbbb906cae009148eb3796de43d Mon Sep 17 00:00:00 2001 From: sarven Date: Wed, 21 Jan 2009 19:56:18 +0000 Subject: form_password markup and style --- actions/passwordsettings.php | 20 +++++++++++++++++--- theme/base/css/display.css | 3 ++- 2 files changed, 19 insertions(+), 4 deletions(-) diff --git a/actions/passwordsettings.php b/actions/passwordsettings.php index f96da13bd..17b2de4e8 100644 --- a/actions/passwordsettings.php +++ b/actions/passwordsettings.php @@ -81,21 +81,35 @@ class PasswordsettingsAction extends AccountSettingsAction { $user = common_current_user(); $this->elementStart('form', array('method' => 'POST', - 'id' => 'password', + 'id' => 'form_password', + 'class' => 'form_settings', 'action' => common_local_url('profilesettings'))); - + $this->elementStart('fieldset'); + $this->element('legend', null, _('Password change')); $this->hidden('token', common_session_token()); + + $this->elementStart('ul', 'form_data'); // Users who logged in with OpenID won't have a pwd if ($user->password) { + $this->elementStart('li'); $this->password('oldpassword', _('Old password')); + $this->elementEnd('li'); } + $this->elementStart('li'); $this->password('newpassword', _('New password'), _('6 or more characters')); + $this->elementEnd('li'); + $this->elementStart('li'); $this->password('confirm', _('Confirm'), _('same as password above')); + $this->elementEnd('li'); + $this->elementEnd('ul'); + $this->submit('changepass', _('Change')); + + $this->elementEnd('fieldset'); $this->elementEnd('form'); } @@ -158,4 +172,4 @@ class PasswordsettingsAction extends AccountSettingsAction $this->showForm(_('Password saved.'), true); } -} \ No newline at end of file +} diff --git a/theme/base/css/display.css b/theme/base/css/display.css index c16fa4ab0..18205fceb 100644 --- a/theme/base/css/display.css +++ b/theme/base/css/display.css @@ -147,7 +147,8 @@ font-weight:bold; #form_settings_profile legend, #form_login legend, -#form_register legend { +#form_register legend, +#form_password legend { display:none; } -- cgit v1.2.3-54-g00ecf From 41f74218f2ab70b78ba96d386b41fb6a1f958f75 Mon Sep 17 00:00:00 2001 From: sarven Date: Wed, 21 Jan 2009 20:33:37 +0000 Subject: Profile avatar settings --- actions/avatarsettings.php | 47 ++++++++++++++++++++++++++----------------- js/jcrop/jquery.Jcrop.go.js | 41 +++++++++++++++++++++++++++++++++++++ js/jcrop/jquery.Jcrop.pack.js | 8 ++++++++ js/jquery.Jcrop.go.js | 41 ------------------------------------- js/jquery.Jcrop.pack.js | 8 -------- theme/base/css/display.css | 28 +++++++++++++++++++------- 6 files changed, 98 insertions(+), 75 deletions(-) create mode 100644 js/jcrop/jquery.Jcrop.go.js create mode 100644 js/jcrop/jquery.Jcrop.pack.js delete mode 100644 js/jquery.Jcrop.go.js delete mode 100644 js/jquery.Jcrop.pack.js diff --git a/actions/avatarsettings.php b/actions/avatarsettings.php index a9b381b0a..ffbeb5486 100644 --- a/actions/avatarsettings.php +++ b/actions/avatarsettings.php @@ -37,12 +37,13 @@ require_once INSTALLDIR.'/lib/accountsettingsaction.php'; /** * Upload an avatar * - * We use jQuery to crop the image after upload. + * We use jCrop plugin for jQuery to crop the image after upload. * * @category Settings * @package Laconica * @author Evan Prodromou * @author Zach Copley + * @author Sarven Capadisli * @license http://www.fsf.org/licensing/licenses/agpl-3.0.html GNU Affero General Public License version 3.0 * @link http://laconi.ca/ */ @@ -94,42 +95,43 @@ class AvatarsettingsAction extends AccountSettingsAction $original = $profile->getOriginalAvatar(); $this->elementStart('form', array('enctype' => 'multipart/form-data', - 'method' => 'POST', - 'id' => 'avatar', + 'method' => 'post', + 'id' => 'form_settings_avatar', + 'class' => 'form_settings', 'action' => common_local_url('avatarsettings'))); + $this->elementStart('fieldset'); + $this->element('legend', null, _('Avatar settings')); $this->hidden('token', common_session_token()); + $this->elementStart('ul', 'form_data'); if ($original) { - $this->elementStart('div', + $this->elementStart('li', array('id' => 'avatar_original', 'class' => 'avatar_view')); - $this->element('h3', null, _("Original:")); + $this->element('h2', null, _("Original")); $this->elementStart('div', array('id'=>'avatar_original_view')); $this->element('img', array('src' => $original->url, - 'class' => 'avatar original', 'width' => $original->width, 'height' => $original->height, 'alt' => $user->nickname)); $this->elementEnd('div'); - $this->elementEnd('div'); + $this->elementEnd('li'); } $avatar = $profile->getAvatar(AVATAR_PROFILE_SIZE); if ($avatar) { - $this->elementStart('div', + $this->elementStart('li', array('id' => 'avatar_preview', 'class' => 'avatar_view')); - $this->element('h3', null, _("Preview:")); + $this->element('h2', null, _("Preview")); $this->elementStart('div', array('id'=>'avatar_preview_view')); $this->element('img', array('src' => $original->url,//$avatar->url, - 'class' => 'avatar profile', 'width' => AVATAR_PROFILE_SIZE, 'height' => AVATAR_PROFILE_SIZE, 'alt' => $user->nickname)); $this->elementEnd('div'); - $this->elementEnd('div'); foreach (array('avatar_crop_x', 'avatar_crop_y', 'avatar_crop_w', 'avatar_crop_h') as $crop_info) { @@ -138,21 +140,28 @@ class AvatarsettingsAction extends AccountSettingsAction 'id' => $crop_info)); } $this->submit('crop', _('Crop')); + + $this->elementEnd('li'); } + $this->elementStart('li', array ('id' => 'settings_attach')); + $this->element('input', array('name' => 'avatarfile', + 'type' => 'file', + 'id' => 'avatarfile')); $this->element('input', array('name' => 'MAX_FILE_SIZE', 'type' => 'hidden', 'id' => 'MAX_FILE_SIZE', 'value' => MAX_AVATAR_SIZE)); + $this->elementEnd('li'); + $this->elementEnd('ul'); - $this->elementStart('p'); - - $this->element('input', array('name' => 'avatarfile', - 'type' => 'file', - 'id' => 'avatarfile')); - $this->elementEnd('p'); - + $this->elementStart('ul', 'form_actions'); + $this->elementStart('li'); $this->submit('upload', _('Upload')); + $this->elementEnd('li'); + $this->elementEnd('ul'); + + $this->elementEnd('fieldset'); $this->elementEnd('form'); } @@ -277,7 +286,7 @@ class AvatarsettingsAction extends AccountSettingsAction { parent::showStylesheets(); $jcropStyle = - common_path('js/jcrop/jquery.Jcrop.css?version='.LACONICA_VERSION); + common_path('theme/base/css/jquery.Jcrop.css?version='.LACONICA_VERSION); $this->element('link', array('rel' => 'stylesheet', 'type' => 'text/css', diff --git a/js/jcrop/jquery.Jcrop.go.js b/js/jcrop/jquery.Jcrop.go.js new file mode 100644 index 000000000..d5176c14c --- /dev/null +++ b/js/jcrop/jquery.Jcrop.go.js @@ -0,0 +1,41 @@ + $(function(){ + jQuery("#avatar_original img").Jcrop({ + onChange: showPreview, + setSelect: [ 0, 0, $("#avatar_original img").attr("width"), $("#avatar_original img").attr("height") ], + onSelect: updateCoords, + aspectRatio: 1, + boxWidth: 480, + boxHeight: 480, + bgColor: '#000', + bgOpacity: .4 + }); + }); + + function showPreview(coords) { + var rx = 96 / coords.w; + var ry = 96 / coords.h; + + var img_width = $("#avatar_original img").attr("width"); + var img_height = $("#avatar_original img").attr("height"); + + $('#avatar_preview img').css({ + width: Math.round(rx *img_width) + 'px', + height: Math.round(ry * img_height) + 'px', + marginLeft: '-' + Math.round(rx * coords.x) + 'px', + marginTop: '-' + Math.round(ry * coords.y) + 'px' + }); + }; + + function updateCoords(c) { + $('#avatar_crop_x').val(c.x); + $('#avatar_crop_y').val(c.y); + $('#avatar_crop_w').val(c.w); + $('#avatar_crop_h').val(c.h); + }; + + function checkCoords() { + if (parseInt($('#avatar_crop_w').val())) return true; + alert('Please select a crop region then press submit.'); + return false; + }; + diff --git a/js/jcrop/jquery.Jcrop.pack.js b/js/jcrop/jquery.Jcrop.pack.js new file mode 100644 index 000000000..aa82e8abe --- /dev/null +++ b/js/jcrop/jquery.Jcrop.pack.js @@ -0,0 +1,8 @@ +/** + * Jcrop v.0.9.5 (packed) + * (c) 2008 Kelly Hallman and DeepLiquid.com + * More information: http://deepliquid.com/content/Jcrop.html + * Released under MIT License - this header must remain with code + */ + +eval(function(p,a,c,k,e,d){e=function(c){return(c35?String.fromCharCode(c+29):c.toString(36))};if(!''.replace(/^/,String)){while(c--){d[e(c)]=k[c]||e(c)}k=[function(e){return d[e]}];e=function(){return'\\w+'};c=1};while(c--){if(k[c]){p=p.replace(new RegExp('\\b'+e(c)+'\\b','g'),k[c])}}return p}('$.1n=7(G,F){d G=G,F=F;g(1p(G)!==\'2d\')G=$(G)[0];g(1p(F)!==\'2d\')F={};g(!(\'2x\'1a F))F.2x=$.3d.3e?K:M;g(!(\'2c\'1a F))F.2c=$.3d.3e?K:M;d 4f={2x:K,3W:\'4C\',1f:4D,3T:\'4Y\',3x:.6,3O:.4,3P:.5,53:5,3N:9,3D:5,51:14,25:0,2c:M,3I:M,3B:M,30:M,3A:M,49:0,4p:0,4k:8,3V:20,3X:3,2f:K,3n:[0,0],2z:[0,0],2O:[0,0],2D:7(){},2G:7(){}};d j=4f;21(F);d $I=$(G).B({16:\'1b\'});47($I,j.49,j.4p);d S=$I.W(),L=$I.U(),$12=$(\'<12 />\').W(S).U(L).1f(1L(\'4F\')).B({16:\'4H\',4B:j.3T});g(j.1f)$12.1f(j.1f);$I.54($12);d $34=$(\'\').3Y(\'2N\',$I.3Y(\'2N\')).B(\'16\',\'1b\').W(S).U(L);d $2C=$(\'<12 />\').W(1t(V)).U(1t(V)).B({1l:59,16:\'1b\',4o:\'4g\'}).1P($34);d $2g=$(\'<12 />\').W(1t(V)).U(1t(V)).B({1l:5b});d $28=$(\'<12 />\').B({16:\'1b\',1l:55}).3U($I).1P($2C,$2g);d 23=j.4k;d $1S=$(\'<12 />\').1f(1L(\'3v\')).W(S+(23*2)).U(L+(23*2)).B({16:\'1b\',R:D(-23),P:D(-23),1l:3R,1z:0}).3q(48);d 1I,1Q;d 2u=2Q(G),1q,1B,3i,58,3h,1O;g(\'36\'1a j){1I=j.36[0]/S;1Q=j.36[1]/L}d E=7(){d A=0,u=0,q=0,m=0,Z,Y;7 1A(z){d z=2T(z);q=A=z[0];m=u=z[1]};7 1y(z){d z=2T(z);Z=z[0]-q;Y=z[1]-m;q=z[0];m=z[1]};7 3f(){k[Z,Y]};7 2b(2y){d Z=2y[0],Y=2y[1];g(0>A+Z)Z-=Z+A;g(0>u+Y)Y-=Y+u;g(LS){15=S;h=N.17((15-A)/1k);13=1Z<0?u-h:h+u}}1g{15=q;h=3c/1k;13=1Z<0?u-h:u+h;g(13<0){13=0;w=N.17((13-u)*1k);15=1V<0?A-w:w+A}1g g(13>L){13=L;w=N.17(13-u)*1k;15=1V<0?A-w:w+A}}k 4E=3g(1F(A,u,15,13))};7 2T(p){g(p[0]<0)p[0]=0;g(p[1]<0)p[1]=0;g(p[0]>S)p[0]=S;g(p[1]>L)p[1]=L;k[p[0],p[1]]};7 1F(A,u,q,m){d 2R=A,3r=q,3o=u,3l=m;g(q2q))q=(1U>0)?(A+2q):(A-2q);g(2n&&(N.17(22)>2n))m=(22>0)?(u+2n):(u-2n);g(2i&&(N.17(22)<2i))m=(22>0)?(u+2i):(u-2i);g(2m&&(N.17(1U)<2m))q=(1U>0)?(A+2m):(A-2m);g(A<0){q-=A;A-=A}g(u<0){m-=u;u-=u}g(q<0){A-=q;q-=q}g(m<0){u-=m;m-=m}g(q>S){d X=q-S;A-=X;q-=X}g(m>L){d X=m-L;u-=X;m-=X}g(A>S){d X=A-L;m-=X;u-=X}g(u>L){d X=u-L;m-=X;u-=X}k 3g(1F(A,u,q,m))};7 3g(a){k{x:a[0],y:a[1],q:a[2],m:a[3],w:a[2]-a[0],h:a[3]-a[1]}};k{1F:1F,1A:1A,1y:1y,3f:3f,2b:2b,2K:2K,Q:Q}}();d J=7(){d 4v,4z,4y,1R,2U=4x;d 2F={};d H={};d 2E=K;d 1i=j.3D;g(j.30){2F={R:1Y(\'3C\').B(\'R\',$.3d.3e?D(-1):D(0)),3Q:1Y(\'3C\'),P:1Y(\'3z\'),3L:1Y(\'3z\')}}g(j.3A){H.t=1W(\'n\');H.b=1W(\'s\');H.r=1W(\'e\');H.l=1W(\'w\')}j.3B&&2Y([\'n\',\'s\',\'e\',\'w\']);j.3I&&2Y([\'1M\',\'11\',\'1s\',\'2e\']);7 1Y(1u){d 1J=$(\'<12 />\').B({16:\'1b\',1z:j.3O}).1f(1L(1u));$2C.1P(1J);k 1J};7 2W(T,3y){d 1J=$(\'<12 />\').3q(3b(T)).B({3p:T+\'-2A\',16:\'1b\',1l:3y});$2g.1P(1J);k 1J};7 3J(T){k 2W(T,2U++).B({R:D(-1i+1),P:D(-1i+1),1z:j.3P}).1f(1L(\'H\'))};7 1W(T){d s=j.3N,o=1i,h=s,w=s,t=o,l=o;1E(T){C\'n\':C\'s\':w=1t(V);O;C\'e\':C\'w\':h=1t(V);O}k 2W(T,2U++).W(w).U(h).B({R:D(-t+1),P:D(-l+1)})};7 2Y(2J){4U(i 1a 2J)H[2J[i]]=3J(2J[i])};7 31(c){d 3a=N.1K((c.h/2)-1i),35=N.1K((c.w/2)-1i),4V=4W=-1i+1,2a=c.w-1i,1X=c.h-1i,x,y;\'e\'1a H&&H.e.B({R:D(3a),P:D(2a)})&&H.w.B({R:D(3a)})&&H.s.B({R:D(1X),P:D(35)})&&H.n.B({P:D(35)});\'1s\'1a H&&H.1s.B({P:D(2a)})&&H.2e.B({R:D(1X),P:D(2a)})&&H.1M.B({R:D(1X)});\'b\'1a H&&H.b.B({R:D(1X)})&&H.r.B({P:D(2a)})};7 3K(x,y){$34.B({R:D(-y),P:D(-x)});$28.B({R:D(y),P:D(x)})};7 2A(w,h){$28.W(w).U(h)};7 3s(){d p=E.Q();E.1A([p.x,p.y]);E.1y([p.q,p.m])};7 2I(){g(1R)k 1e()};7 1e(){d c=E.Q();2A(c.w,c.h);3K(c.x,c.y);j.30&&2F[\'3L\'].B({P:D(c.w-1)})&&2F[\'3Q\'].B({R:D(c.h-1)});2E&&31(c);1R||1w();j.2D(2H(c))};7 1w(){$28.1w();$I.B(\'1z\',j.3x);1R=M};7 1r(){1o();$28.1v();$I.B(\'1z\',1);1R=K};7 1v(){1r();$I.B(\'1z\',1);1R=K};7 2t(){2E=M;31(E.Q());$2g.1w()};7 1o(){2E=K;$2g.1v()};7 2o(v){(3h=v)?1o():2t()};7 1h(){d c=E.Q();2o(K);3s()};1o();$2C.1P($(\'<12 />\').1f(1L(\'3v\')).3q(3b(\'1N\')).B({3p:\'1N\',16:\'1b\',1l:4M,1z:0}));k{2I:2I,1e:1e,1r:1r,1w:1w,1v:1v,2t:2t,1o:1o,2o:2o,1h:1h}}();d 1j=7(){d 2w=7(){},2v=7(){},2L=j.2x;g(!2L){$1S.3k(2B).2S(26).4N(26)}7 4j(){g(2L){$(3t).3k(2B).2S(26)}$1S.B({1l:4G})}7 4i(){g(2L){$(3t).3H(\'3k\',2B).3H(\'2S\',26)}$1S.B({1l:3R})}7 2B(e){2w(2r(e))};7 26(e){e.2j();e.2k();g(1q){1q=K;2v(2r(e));j.2G(2H(E.Q()));4i();2w=7(){};2v=7(){}}k K};7 1G(1N,1h){1q=M;2w=1N;2v=1h;4j();k K};7 1x(t){$1S.B(\'3p\',t)};$I.4s($1S);k{1G:1G,1x:1x}}();d 33=7(){d $24=$(\'<4w 1u="4L" />\').B({16:\'1b\',P:\'-4O\'}).57(43).56(2f).5a(41),$3S=$(\'<12 />\').B({16:\'1b\',4o:\'4g\'}).1P($24);7 2l(){g(j.2c){$24.1w();$24.4Z()}};7 41(e){$24.1v()};7 2f(e){g(!j.2f)k;d 42=1O,1C;1O=e.4Q?M:K;g(42!=1O){g(1O&&1q){1C=E.Q();1B=1C.w/1C.h}1g 1B=0;J.1e()}e.2k();e.2j();k K};7 29(e,x,y){E.2b([x,y]);J.2I();e.2j();e.2k()};7 43(e){g(e.4T)k M;2f(e);d 2h=1O?10:1;1E(e.5d){C 37:29(e,-2h,0);O;C 39:29(e,2h,0);O;C 38:29(e,0,-2h);O;C 40:29(e,0,2h);O;C 27:J.1r();O;C 9:k M}k K};g(j.2c)$3S.3U($I);k{2l:2l}}();7 D(n){k\'\'+1m(n)+\'D\'};7 1t(n){k\'\'+1m(n)+\'%\'};7 1L(44){k j.3W+\'-\'+44};7 2Q(G){d z=$(G).2y();k[z.P,z.R]};7 2r(e){k[(e.4q-2u[0]),(e.4r-2u[1])]};7 46(1u){g(1u!=3i){1j.1x(1u);3i=1u}};7 4a(19,z){2u=2Q(G);1j.1x(19==\'1N\'?19:19+\'-2A\');g(19==\'1N\')k 1j.1G(4e(z),2P);d 1C=E.Q();E.1A(E.2K(4b(19)));1j.1G(45(19,1C),2P)};7 45(19,f){k 7(z){g(!j.25&&!1B)1E(19){C\'e\':z[1]=f.m;O;C\'w\':z[1]=f.m;O;C\'n\':z[0]=f.q;O;C\'s\':z[0]=f.q;O}1g 1E(19){C\'e\':z[1]=f.y+1;O;C\'w\':z[1]=f.y+1;O;C\'n\':z[0]=f.x+1;O;C\'s\':z[0]=f.x+1;O}E.1y(z);J.1e()}};7 4e(z){d 2M=z;33.2l();k 7(z){E.2b([z[0]-2M[0],z[1]-2M[1]]);2M=z;J.1e()}};7 4b(T){1E(T){C\'n\':k\'1M\';C\'s\':k\'11\';C\'e\':k\'11\';C\'w\':k\'1s\';C\'1s\':k\'1M\';C\'11\':k\'2e\';C\'2e\':k\'11\';C\'1M\':k\'1s\'}};7 3b(T){k 7(e){1q=M;4a(T,2r(e));e.2k();e.2j();k K}};7 47($G,w,h){d 11=$G.W(),1H=$G.U();g((11>w)&&w>0){11=w;1H=(w/$G.W())*$G.U()}g((1H>h)&&h>0){1H=h;11=(h/$G.U())*$G.W()}1I=$G.W()/11;1Q=$G.U()/1H;$G.W(11).U(1H)};7 2H(c){k{x:1m(c.x*1I),y:1m(c.y*1Q),q:1m(c.q*1I),m:1m(c.m*1Q),w:1m(c.w*1I),h:1m(c.h*1Q)}};7 2P(z){d c=E.Q();g(c.w>j.3n[0]&&c.h>j.3n[1]){J.2t();J.1h()}1g{J.1r()}1j.1x(\'2X\')};7 48(e){1q=M;2u=2Q(G);J.1r();J.1o();46(\'2X\');E.1A(2r(e));1j.1G(4c,2P);33.2l();e.2k();e.2j();k K};7 4c(z){E.1y(z);J.1e()};7 2Z(a){d A=a[0],u=a[1],q=a[2],m=a[3];g(3h)k;d 2s=E.1F(A,u,q,m);d c=E.Q();d 18=2p=[c.x,c.y,c.q,c.m];d 3w=j.3V;d x=18[0];d y=18[1];d q=18[2];d m=18[3];d 3Z=2s[0]-2p[0];d 4m=2s[1]-2p[1];d 4n=2s[2]-2p[2];d 4l=2s[3]-2p[3];d 1c=0;d 4h=j.3X;J.2o(M);d 3u=7(){k 7(){1c+=(V-1c)/4h;18[0]=x+((1c/V)*3Z);18[1]=y+((1c/V)*4m);18[2]=q+((1c/V)*4n);18[3]=m+((1c/V)*4l);g(1c=4K.8)1c=V;1d(18)}}();7 32(){4I.4t(3u,3w)};32()};7 1d(l){E.1A([l[0],l[1]]);E.1y([l[2],l[3]]);J.1e()};7 21(F){g(1p(F)!=\'2d\')F={};j=$.4X(j,F);g(1p(j.2D)!==\'7\')j.2D=7(){};g(1p(j.2G)!==\'7\')j.2G=7(){}};7 3m(){k 2H(E.Q())};7 2V(){k E.Q()};7 3E(F){21(F);g(\'1d\'1a F){1d(F.1d);J.1h()}};g(1p(F)!=\'2d\')F={};g(\'1d\'1a F){1d(F.1d);J.1h()}d 2q=j.2z[0]||0;d 2n=j.2z[1]||0;d 2m=j.2O[0]||0;d 2i=j.2O[1]||0;1j.1x(\'2X\');k{2Z:2Z,1d:1d,21:3E,3m:3m,2V:2V}};$.5e.1n=7(j){7 3G(1D){d 4d=j.4R||1D.2N;d I=4P 4S();d 1D=1D;I.50=7(){$(1D).1v().4A(I);1D.1n=$.1n(I,j)};I.2N=4d};g(1p(j)!==\'2d\')j={};1T.4J(7(){g(\'1n\'1a 1T){g(j==\'52\')k 1T.1n;1g 1T.1n.21(j)}1g 3G(1T)});k 1T};',62,325,'|||||||function||||||var|||if|||options|return||y2||||x2||||y1|||||pos|x1|css|case|px|Coords|opt|obj|handle|img|Selection|false|boundy|true|Math|break|left|getFixed|top|boundx|ord|height|100|width|delta|oy|ox||nw|div|yy||xx|position|abs|animat|mode|in|absolute|pcent|setSelect|update|addClass|else|done|hhs|Tracker|aspect|zIndex|parseInt|Jcrop|disableHandles|typeof|btndown|release|ne|pct|type|hide|show|setCursor|setCurrent|opacity|setPressed|aspectLock|fc|from|switch|flipCoords|activateHandlers|nh|xscale|jq|round|cssClass|sw|move|shift_down|append|yscale|awake|trk|this|xsize|rw|insertDragbar|south|insertBorder|rh||setOptions|ysize|bound|keymgr|aspectRatio|trackUp||sel|doNudge|east|moveOffset|keySupport|object|se|watchShift|hdl_holder|nudge|ymin|preventDefault|stopPropagation|watchKeys|xmin|ylimit|animMode|initcr|xlimit|mouseAbs|animto|enableHandles|docOffset|onDone|onMove|trackDocument|offset|maxSize|resize|trackMove|img_holder|onChange|seehandles|borders|onSelect|unscale|updateVisible|li|getCorner|trackDoc|lloc|src|minSize|doneSelect|getPos|xa|mouseup|rebound|hdep|tellScaled|dragDiv|crosshair|createHandles|animateTo|drawBorders|moveHandles|animateStart|KeyManager|img2|midhoriz|trueSize||||midvert|createDragger|rwa|browser|msie|getOffset|makeObj|animating|lastcurs|rha|mousemove|yb|tellSelect|minSelect|ya|cursor|mousedown|xb|refresh|document|animator|tracker|interv|bgOpacity|zi|vline|dragEdges|sideHandles|hline|handleOffset|setOptionsNew|getRect|attachWhenDone|unbind|cornerHandles|insertHandle|moveto|right|real_ratio|handleSize|borderOpacity|handleOpacity|bottom|290|keywrap|bgColor|insertBefore|animationDelay|baseClass|swingSpeed|attr|ix1||onBlur|init_shift|parseKey|cl|dragmodeHandler|myCursor|presize|newSelection|boxWidth|startDragMode|oppLockCorner|selectDrag|loadsrc|createMover|defaults|hidden|velocity|toBack|toFront|boundary|iy2|iy1|ix2|overflow|boxHeight|pageX|pageY|before|setTimeout|max|start|input|370|dragmode|end|after|backgroundColor|jcrop|null|last|holder|450|relative|window|each|99|radio|360|mouseout|30px|new|shiftKey|useImg|Image|ctrlKey|for|north|west|extend|black|focus|onload|edgeMargin|api|handlePad|wrap|300|keyup|keydown|dimmed|310|blur|320|min|keyCode|fn'.split('|'),0,{})) diff --git a/js/jquery.Jcrop.go.js b/js/jquery.Jcrop.go.js deleted file mode 100644 index e5d587354..000000000 --- a/js/jquery.Jcrop.go.js +++ /dev/null @@ -1,41 +0,0 @@ - $(function(){ - jQuery("#photo_original img").Jcrop({ - onChange: showPreview, - setSelect: [ 0, 0, $("#photo_original img").attr("width"), $("#photo_original img").attr("height") ], - onSelect: updateCoords, - aspectRatio: 1, - boxWidth: 480, - boxHeight: 480, - bgColor: '#000', - bgOpacity: .4 - }); - }); - - function showPreview(coords) { - var rx = 96 / coords.w; - var ry = 96 / coords.h; - - var img_width = $("#photo_original img").attr("width"); - var img_height = $("#photo_original img").attr("height"); - - $('#photo_preview img').css({ - width: Math.round(rx *img_width) + 'px', - height: Math.round(ry * img_height) + 'px', - marginLeft: '-' + Math.round(rx * coords.x) + 'px', - marginTop: '-' + Math.round(ry * coords.y) + 'px' - }); - }; - - function updateCoords(c) { - $('#photo_crop_x').val(c.x); - $('#photo_crop_y').val(c.y); - $('#photo_crop_w').val(c.w); - $('#photo_crop_h').val(c.h); - }; - - function checkCoords() { - if (parseInt($('#photo_crop_w').val())) return true; - alert('Please select a crop region then press submit.'); - return false; - }; - diff --git a/js/jquery.Jcrop.pack.js b/js/jquery.Jcrop.pack.js deleted file mode 100644 index aa82e8abe..000000000 --- a/js/jquery.Jcrop.pack.js +++ /dev/null @@ -1,8 +0,0 @@ -/** - * Jcrop v.0.9.5 (packed) - * (c) 2008 Kelly Hallman and DeepLiquid.com - * More information: http://deepliquid.com/content/Jcrop.html - * Released under MIT License - this header must remain with code - */ - -eval(function(p,a,c,k,e,d){e=function(c){return(c35?String.fromCharCode(c+29):c.toString(36))};if(!''.replace(/^/,String)){while(c--){d[e(c)]=k[c]||e(c)}k=[function(e){return d[e]}];e=function(){return'\\w+'};c=1};while(c--){if(k[c]){p=p.replace(new RegExp('\\b'+e(c)+'\\b','g'),k[c])}}return p}('$.1n=7(G,F){d G=G,F=F;g(1p(G)!==\'2d\')G=$(G)[0];g(1p(F)!==\'2d\')F={};g(!(\'2x\'1a F))F.2x=$.3d.3e?K:M;g(!(\'2c\'1a F))F.2c=$.3d.3e?K:M;d 4f={2x:K,3W:\'4C\',1f:4D,3T:\'4Y\',3x:.6,3O:.4,3P:.5,53:5,3N:9,3D:5,51:14,25:0,2c:M,3I:M,3B:M,30:M,3A:M,49:0,4p:0,4k:8,3V:20,3X:3,2f:K,3n:[0,0],2z:[0,0],2O:[0,0],2D:7(){},2G:7(){}};d j=4f;21(F);d $I=$(G).B({16:\'1b\'});47($I,j.49,j.4p);d S=$I.W(),L=$I.U(),$12=$(\'<12 />\').W(S).U(L).1f(1L(\'4F\')).B({16:\'4H\',4B:j.3T});g(j.1f)$12.1f(j.1f);$I.54($12);d $34=$(\'\').3Y(\'2N\',$I.3Y(\'2N\')).B(\'16\',\'1b\').W(S).U(L);d $2C=$(\'<12 />\').W(1t(V)).U(1t(V)).B({1l:59,16:\'1b\',4o:\'4g\'}).1P($34);d $2g=$(\'<12 />\').W(1t(V)).U(1t(V)).B({1l:5b});d $28=$(\'<12 />\').B({16:\'1b\',1l:55}).3U($I).1P($2C,$2g);d 23=j.4k;d $1S=$(\'<12 />\').1f(1L(\'3v\')).W(S+(23*2)).U(L+(23*2)).B({16:\'1b\',R:D(-23),P:D(-23),1l:3R,1z:0}).3q(48);d 1I,1Q;d 2u=2Q(G),1q,1B,3i,58,3h,1O;g(\'36\'1a j){1I=j.36[0]/S;1Q=j.36[1]/L}d E=7(){d A=0,u=0,q=0,m=0,Z,Y;7 1A(z){d z=2T(z);q=A=z[0];m=u=z[1]};7 1y(z){d z=2T(z);Z=z[0]-q;Y=z[1]-m;q=z[0];m=z[1]};7 3f(){k[Z,Y]};7 2b(2y){d Z=2y[0],Y=2y[1];g(0>A+Z)Z-=Z+A;g(0>u+Y)Y-=Y+u;g(LS){15=S;h=N.17((15-A)/1k);13=1Z<0?u-h:h+u}}1g{15=q;h=3c/1k;13=1Z<0?u-h:u+h;g(13<0){13=0;w=N.17((13-u)*1k);15=1V<0?A-w:w+A}1g g(13>L){13=L;w=N.17(13-u)*1k;15=1V<0?A-w:w+A}}k 4E=3g(1F(A,u,15,13))};7 2T(p){g(p[0]<0)p[0]=0;g(p[1]<0)p[1]=0;g(p[0]>S)p[0]=S;g(p[1]>L)p[1]=L;k[p[0],p[1]]};7 1F(A,u,q,m){d 2R=A,3r=q,3o=u,3l=m;g(q2q))q=(1U>0)?(A+2q):(A-2q);g(2n&&(N.17(22)>2n))m=(22>0)?(u+2n):(u-2n);g(2i&&(N.17(22)<2i))m=(22>0)?(u+2i):(u-2i);g(2m&&(N.17(1U)<2m))q=(1U>0)?(A+2m):(A-2m);g(A<0){q-=A;A-=A}g(u<0){m-=u;u-=u}g(q<0){A-=q;q-=q}g(m<0){u-=m;m-=m}g(q>S){d X=q-S;A-=X;q-=X}g(m>L){d X=m-L;u-=X;m-=X}g(A>S){d X=A-L;m-=X;u-=X}g(u>L){d X=u-L;m-=X;u-=X}k 3g(1F(A,u,q,m))};7 3g(a){k{x:a[0],y:a[1],q:a[2],m:a[3],w:a[2]-a[0],h:a[3]-a[1]}};k{1F:1F,1A:1A,1y:1y,3f:3f,2b:2b,2K:2K,Q:Q}}();d J=7(){d 4v,4z,4y,1R,2U=4x;d 2F={};d H={};d 2E=K;d 1i=j.3D;g(j.30){2F={R:1Y(\'3C\').B(\'R\',$.3d.3e?D(-1):D(0)),3Q:1Y(\'3C\'),P:1Y(\'3z\'),3L:1Y(\'3z\')}}g(j.3A){H.t=1W(\'n\');H.b=1W(\'s\');H.r=1W(\'e\');H.l=1W(\'w\')}j.3B&&2Y([\'n\',\'s\',\'e\',\'w\']);j.3I&&2Y([\'1M\',\'11\',\'1s\',\'2e\']);7 1Y(1u){d 1J=$(\'<12 />\').B({16:\'1b\',1z:j.3O}).1f(1L(1u));$2C.1P(1J);k 1J};7 2W(T,3y){d 1J=$(\'<12 />\').3q(3b(T)).B({3p:T+\'-2A\',16:\'1b\',1l:3y});$2g.1P(1J);k 1J};7 3J(T){k 2W(T,2U++).B({R:D(-1i+1),P:D(-1i+1),1z:j.3P}).1f(1L(\'H\'))};7 1W(T){d s=j.3N,o=1i,h=s,w=s,t=o,l=o;1E(T){C\'n\':C\'s\':w=1t(V);O;C\'e\':C\'w\':h=1t(V);O}k 2W(T,2U++).W(w).U(h).B({R:D(-t+1),P:D(-l+1)})};7 2Y(2J){4U(i 1a 2J)H[2J[i]]=3J(2J[i])};7 31(c){d 3a=N.1K((c.h/2)-1i),35=N.1K((c.w/2)-1i),4V=4W=-1i+1,2a=c.w-1i,1X=c.h-1i,x,y;\'e\'1a H&&H.e.B({R:D(3a),P:D(2a)})&&H.w.B({R:D(3a)})&&H.s.B({R:D(1X),P:D(35)})&&H.n.B({P:D(35)});\'1s\'1a H&&H.1s.B({P:D(2a)})&&H.2e.B({R:D(1X),P:D(2a)})&&H.1M.B({R:D(1X)});\'b\'1a H&&H.b.B({R:D(1X)})&&H.r.B({P:D(2a)})};7 3K(x,y){$34.B({R:D(-y),P:D(-x)});$28.B({R:D(y),P:D(x)})};7 2A(w,h){$28.W(w).U(h)};7 3s(){d p=E.Q();E.1A([p.x,p.y]);E.1y([p.q,p.m])};7 2I(){g(1R)k 1e()};7 1e(){d c=E.Q();2A(c.w,c.h);3K(c.x,c.y);j.30&&2F[\'3L\'].B({P:D(c.w-1)})&&2F[\'3Q\'].B({R:D(c.h-1)});2E&&31(c);1R||1w();j.2D(2H(c))};7 1w(){$28.1w();$I.B(\'1z\',j.3x);1R=M};7 1r(){1o();$28.1v();$I.B(\'1z\',1);1R=K};7 1v(){1r();$I.B(\'1z\',1);1R=K};7 2t(){2E=M;31(E.Q());$2g.1w()};7 1o(){2E=K;$2g.1v()};7 2o(v){(3h=v)?1o():2t()};7 1h(){d c=E.Q();2o(K);3s()};1o();$2C.1P($(\'<12 />\').1f(1L(\'3v\')).3q(3b(\'1N\')).B({3p:\'1N\',16:\'1b\',1l:4M,1z:0}));k{2I:2I,1e:1e,1r:1r,1w:1w,1v:1v,2t:2t,1o:1o,2o:2o,1h:1h}}();d 1j=7(){d 2w=7(){},2v=7(){},2L=j.2x;g(!2L){$1S.3k(2B).2S(26).4N(26)}7 4j(){g(2L){$(3t).3k(2B).2S(26)}$1S.B({1l:4G})}7 4i(){g(2L){$(3t).3H(\'3k\',2B).3H(\'2S\',26)}$1S.B({1l:3R})}7 2B(e){2w(2r(e))};7 26(e){e.2j();e.2k();g(1q){1q=K;2v(2r(e));j.2G(2H(E.Q()));4i();2w=7(){};2v=7(){}}k K};7 1G(1N,1h){1q=M;2w=1N;2v=1h;4j();k K};7 1x(t){$1S.B(\'3p\',t)};$I.4s($1S);k{1G:1G,1x:1x}}();d 33=7(){d $24=$(\'<4w 1u="4L" />\').B({16:\'1b\',P:\'-4O\'}).57(43).56(2f).5a(41),$3S=$(\'<12 />\').B({16:\'1b\',4o:\'4g\'}).1P($24);7 2l(){g(j.2c){$24.1w();$24.4Z()}};7 41(e){$24.1v()};7 2f(e){g(!j.2f)k;d 42=1O,1C;1O=e.4Q?M:K;g(42!=1O){g(1O&&1q){1C=E.Q();1B=1C.w/1C.h}1g 1B=0;J.1e()}e.2k();e.2j();k K};7 29(e,x,y){E.2b([x,y]);J.2I();e.2j();e.2k()};7 43(e){g(e.4T)k M;2f(e);d 2h=1O?10:1;1E(e.5d){C 37:29(e,-2h,0);O;C 39:29(e,2h,0);O;C 38:29(e,0,-2h);O;C 40:29(e,0,2h);O;C 27:J.1r();O;C 9:k M}k K};g(j.2c)$3S.3U($I);k{2l:2l}}();7 D(n){k\'\'+1m(n)+\'D\'};7 1t(n){k\'\'+1m(n)+\'%\'};7 1L(44){k j.3W+\'-\'+44};7 2Q(G){d z=$(G).2y();k[z.P,z.R]};7 2r(e){k[(e.4q-2u[0]),(e.4r-2u[1])]};7 46(1u){g(1u!=3i){1j.1x(1u);3i=1u}};7 4a(19,z){2u=2Q(G);1j.1x(19==\'1N\'?19:19+\'-2A\');g(19==\'1N\')k 1j.1G(4e(z),2P);d 1C=E.Q();E.1A(E.2K(4b(19)));1j.1G(45(19,1C),2P)};7 45(19,f){k 7(z){g(!j.25&&!1B)1E(19){C\'e\':z[1]=f.m;O;C\'w\':z[1]=f.m;O;C\'n\':z[0]=f.q;O;C\'s\':z[0]=f.q;O}1g 1E(19){C\'e\':z[1]=f.y+1;O;C\'w\':z[1]=f.y+1;O;C\'n\':z[0]=f.x+1;O;C\'s\':z[0]=f.x+1;O}E.1y(z);J.1e()}};7 4e(z){d 2M=z;33.2l();k 7(z){E.2b([z[0]-2M[0],z[1]-2M[1]]);2M=z;J.1e()}};7 4b(T){1E(T){C\'n\':k\'1M\';C\'s\':k\'11\';C\'e\':k\'11\';C\'w\':k\'1s\';C\'1s\':k\'1M\';C\'11\':k\'2e\';C\'2e\':k\'11\';C\'1M\':k\'1s\'}};7 3b(T){k 7(e){1q=M;4a(T,2r(e));e.2k();e.2j();k K}};7 47($G,w,h){d 11=$G.W(),1H=$G.U();g((11>w)&&w>0){11=w;1H=(w/$G.W())*$G.U()}g((1H>h)&&h>0){1H=h;11=(h/$G.U())*$G.W()}1I=$G.W()/11;1Q=$G.U()/1H;$G.W(11).U(1H)};7 2H(c){k{x:1m(c.x*1I),y:1m(c.y*1Q),q:1m(c.q*1I),m:1m(c.m*1Q),w:1m(c.w*1I),h:1m(c.h*1Q)}};7 2P(z){d c=E.Q();g(c.w>j.3n[0]&&c.h>j.3n[1]){J.2t();J.1h()}1g{J.1r()}1j.1x(\'2X\')};7 48(e){1q=M;2u=2Q(G);J.1r();J.1o();46(\'2X\');E.1A(2r(e));1j.1G(4c,2P);33.2l();e.2k();e.2j();k K};7 4c(z){E.1y(z);J.1e()};7 2Z(a){d A=a[0],u=a[1],q=a[2],m=a[3];g(3h)k;d 2s=E.1F(A,u,q,m);d c=E.Q();d 18=2p=[c.x,c.y,c.q,c.m];d 3w=j.3V;d x=18[0];d y=18[1];d q=18[2];d m=18[3];d 3Z=2s[0]-2p[0];d 4m=2s[1]-2p[1];d 4n=2s[2]-2p[2];d 4l=2s[3]-2p[3];d 1c=0;d 4h=j.3X;J.2o(M);d 3u=7(){k 7(){1c+=(V-1c)/4h;18[0]=x+((1c/V)*3Z);18[1]=y+((1c/V)*4m);18[2]=q+((1c/V)*4n);18[3]=m+((1c/V)*4l);g(1c=4K.8)1c=V;1d(18)}}();7 32(){4I.4t(3u,3w)};32()};7 1d(l){E.1A([l[0],l[1]]);E.1y([l[2],l[3]]);J.1e()};7 21(F){g(1p(F)!=\'2d\')F={};j=$.4X(j,F);g(1p(j.2D)!==\'7\')j.2D=7(){};g(1p(j.2G)!==\'7\')j.2G=7(){}};7 3m(){k 2H(E.Q())};7 2V(){k E.Q()};7 3E(F){21(F);g(\'1d\'1a F){1d(F.1d);J.1h()}};g(1p(F)!=\'2d\')F={};g(\'1d\'1a F){1d(F.1d);J.1h()}d 2q=j.2z[0]||0;d 2n=j.2z[1]||0;d 2m=j.2O[0]||0;d 2i=j.2O[1]||0;1j.1x(\'2X\');k{2Z:2Z,1d:1d,21:3E,3m:3m,2V:2V}};$.5e.1n=7(j){7 3G(1D){d 4d=j.4R||1D.2N;d I=4P 4S();d 1D=1D;I.50=7(){$(1D).1v().4A(I);1D.1n=$.1n(I,j)};I.2N=4d};g(1p(j)!==\'2d\')j={};1T.4J(7(){g(\'1n\'1a 1T){g(j==\'52\')k 1T.1n;1g 1T.1n.21(j)}1g 3G(1T)});k 1T};',62,325,'|||||||function||||||var|||if|||options|return||y2||||x2||||y1|||||pos|x1|css|case|px|Coords|opt|obj|handle|img|Selection|false|boundy|true|Math|break|left|getFixed|top|boundx|ord|height|100|width|delta|oy|ox||nw|div|yy||xx|position|abs|animat|mode|in|absolute|pcent|setSelect|update|addClass|else|done|hhs|Tracker|aspect|zIndex|parseInt|Jcrop|disableHandles|typeof|btndown|release|ne|pct|type|hide|show|setCursor|setCurrent|opacity|setPressed|aspectLock|fc|from|switch|flipCoords|activateHandlers|nh|xscale|jq|round|cssClass|sw|move|shift_down|append|yscale|awake|trk|this|xsize|rw|insertDragbar|south|insertBorder|rh||setOptions|ysize|bound|keymgr|aspectRatio|trackUp||sel|doNudge|east|moveOffset|keySupport|object|se|watchShift|hdl_holder|nudge|ymin|preventDefault|stopPropagation|watchKeys|xmin|ylimit|animMode|initcr|xlimit|mouseAbs|animto|enableHandles|docOffset|onDone|onMove|trackDocument|offset|maxSize|resize|trackMove|img_holder|onChange|seehandles|borders|onSelect|unscale|updateVisible|li|getCorner|trackDoc|lloc|src|minSize|doneSelect|getPos|xa|mouseup|rebound|hdep|tellScaled|dragDiv|crosshair|createHandles|animateTo|drawBorders|moveHandles|animateStart|KeyManager|img2|midhoriz|trueSize||||midvert|createDragger|rwa|browser|msie|getOffset|makeObj|animating|lastcurs|rha|mousemove|yb|tellSelect|minSelect|ya|cursor|mousedown|xb|refresh|document|animator|tracker|interv|bgOpacity|zi|vline|dragEdges|sideHandles|hline|handleOffset|setOptionsNew|getRect|attachWhenDone|unbind|cornerHandles|insertHandle|moveto|right|real_ratio|handleSize|borderOpacity|handleOpacity|bottom|290|keywrap|bgColor|insertBefore|animationDelay|baseClass|swingSpeed|attr|ix1||onBlur|init_shift|parseKey|cl|dragmodeHandler|myCursor|presize|newSelection|boxWidth|startDragMode|oppLockCorner|selectDrag|loadsrc|createMover|defaults|hidden|velocity|toBack|toFront|boundary|iy2|iy1|ix2|overflow|boxHeight|pageX|pageY|before|setTimeout|max|start|input|370|dragmode|end|after|backgroundColor|jcrop|null|last|holder|450|relative|window|each|99|radio|360|mouseout|30px|new|shiftKey|useImg|Image|ctrlKey|for|north|west|extend|black|focus|onload|edgeMargin|api|handlePad|wrap|300|keyup|keydown|dimmed|310|blur|320|min|keyCode|fn'.split('|'),0,{})) diff --git a/theme/base/css/display.css b/theme/base/css/display.css index 18205fceb..cfe445a98 100644 --- a/theme/base/css/display.css +++ b/theme/base/css/display.css @@ -148,7 +148,8 @@ font-weight:bold; #form_settings_profile legend, #form_login legend, #form_register legend, -#form_password legend { +#form_password legend, +#form_settings_avatar legend { display:none; } @@ -1161,21 +1162,34 @@ clear:both; - -#photo_original, -#photo_preview { +#form_settings_avatar li { +width:auto; +} +#form_settings_avatar input { +margin-left:0; +} +#avatar_original, +#avatar_preview { float:left; } -#photo_preview, -#settings_photo_action-crop { +#avatar_preview { margin-left:29px; } -#photo_preview_view { +#avatar_preview_view { height:96px; width:96px; +margin-bottom:18px; overflow:hidden; } +#settings_attach, +#form_settings_avatar .form_actions { +clear:both; +} + +#form_settings_avatar .form_actions { +margin-bottom:0; +} -- cgit v1.2.3-54-g00ecf From a39bb4a3b8bddfffc02a0c9f3c5666ff3cba2357 Mon Sep 17 00:00:00 2001 From: sarven Date: Wed, 21 Jan 2009 21:37:08 +0000 Subject: Grabs x,y,w,h from hidden inputs if it is set, otherwise, it will use defaults --- js/jcrop/jquery.Jcrop.go.js | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/js/jcrop/jquery.Jcrop.go.js b/js/jcrop/jquery.Jcrop.go.js index d5176c14c..b2737407b 100644 --- a/js/jcrop/jquery.Jcrop.go.js +++ b/js/jcrop/jquery.Jcrop.go.js @@ -1,7 +1,12 @@ $(function(){ + var x = ($('#avatar_crop_x').val()) ? $('#avatar_crop_x').val() : 0; + var y = ($('#avatar_crop_y').val()) ? $('#avatar_crop_y').val() : 0; + var w = ($('#avatar_crop_w').val()) ? $('#avatar_crop_w').val() : $("#avatar_original img").attr("width"); + var h = ($('#avatar_crop_h').val()) ? $('#avatar_crop_h').val() : $("#avatar_original img").attr("height"); + jQuery("#avatar_original img").Jcrop({ onChange: showPreview, - setSelect: [ 0, 0, $("#avatar_original img").attr("width"), $("#avatar_original img").attr("height") ], + setSelect: [ x, y, w, h ], onSelect: updateCoords, aspectRatio: 1, boxWidth: 480, -- cgit v1.2.3-54-g00ecf From 4b42c3526985a497418db7fbcfe1e7912bb5474d Mon Sep 17 00:00:00 2001 From: sarven Date: Wed, 21 Jan 2009 22:44:27 +0000 Subject: General markup and style cleanup --- actions/showgroup.php | 22 +++++++++++----------- actions/showstream.php | 6 +++--- lib/groupeditform.php | 18 +++++++++++++++--- lib/groupminilist.php | 6 +++--- lib/profileminilist.php | 4 ++-- theme/base/css/display.css | 8 +++++--- 6 files changed, 39 insertions(+), 25 deletions(-) diff --git a/actions/showgroup.php b/actions/showgroup.php index c2cd3d295..bd9d4f175 100644 --- a/actions/showgroup.php +++ b/actions/showgroup.php @@ -195,13 +195,13 @@ class ShowgroupAction extends Action function showGroupProfile() { - $this->elementStart('div', array('id' => 'group_profile', + $this->elementStart('div', array('id' => 'user_profile', 'class' => 'vcard author')); $this->element('h2', null, _('Group profile')); - $this->elementStart('dl', 'group_depiction'); - $this->element('dt', null, _('Photo')); + $this->elementStart('dl', 'user_depiction'); + $this->element('dt', null, _('Avatar')); $this->elementStart('dd'); $logo = ($this->group->homepage_logo) ? @@ -215,7 +215,7 @@ class ShowgroupAction extends Action $this->elementEnd('dd'); $this->elementEnd('dl'); - $this->elementStart('dl', 'group_nickname'); + $this->elementStart('dl', 'user_nickname'); $this->element('dt', null, _('Nickname')); $this->elementStart('dd'); $hasFN = ($this->group->fullname) ? 'nickname url uid' : 'fn nickname url uid'; @@ -226,7 +226,7 @@ class ShowgroupAction extends Action $this->elementEnd('dl'); if ($this->group->fullname) { - $this->elementStart('dl', 'group_fn'); + $this->elementStart('dl', 'user_fn'); $this->element('dt', null, _('Full name')); $this->elementStart('dd'); $this->element('span', 'fn', $this->group->fullname); @@ -235,14 +235,14 @@ class ShowgroupAction extends Action } if ($this->group->location) { - $this->elementStart('dl', 'group_location'); + $this->elementStart('dl', 'user_location'); $this->element('dt', null, _('Location')); $this->element('dd', 'location', $this->group->location); $this->elementEnd('dl'); } if ($this->group->homepage) { - $this->elementStart('dl', 'group_url'); + $this->elementStart('dl', 'user_url'); $this->element('dt', null, _('URL')); $this->elementStart('dd'); $this->element('a', array('href' => $this->group->homepage, @@ -253,7 +253,7 @@ class ShowgroupAction extends Action } if ($this->group->description) { - $this->elementStart('dl', 'group_note'); + $this->elementStart('dl', 'user_note'); $this->element('dt', null, _('Note')); $this->element('dd', 'note', $this->group->description); $this->elementEnd('dl'); @@ -261,10 +261,10 @@ class ShowgroupAction extends Action $this->elementEnd('div'); - $this->elementStart('div', array('id' => 'group_actions')); + $this->elementStart('div', array('id' => 'user_actions')); $this->element('h2', null, _('Group actions')); $this->elementStart('ul'); - $this->elementStart('li', array('id' => 'group_subscribe')); + $this->elementStart('li', array('id' => 'user_subscribe')); $cur = common_current_user(); if ($cur) { if ($cur->isMember($this->group)) { @@ -361,4 +361,4 @@ class ShowgroupAction extends Action _('All members')); } } -} \ No newline at end of file +} diff --git a/actions/showstream.php b/actions/showstream.php index 9734c2907..b2b8b344c 100644 --- a/actions/showstream.php +++ b/actions/showstream.php @@ -410,7 +410,7 @@ class ShowstreamAction extends Action $this->elementStart('p'); $this->element('a', array('href' => common_local_url('subscriptions', array('nickname' => $this->profile->nickname)), - 'class' => 'mores'), + 'class' => 'more'), _('All subscriptions')); $this->elementEnd('p'); } @@ -439,7 +439,7 @@ class ShowstreamAction extends Action $this->elementStart('p'); $this->element('a', array('href' => common_local_url('subscribers', array('nickname' => $this->profile->nickname)), - 'class' => 'mores'), + 'class' => 'more'), _('All subscribers')); $this->elementEnd('p'); } @@ -521,7 +521,7 @@ class ShowstreamAction extends Action $this->elementStart('p'); $this->element('a', array('href' => common_local_url('usergroups', array('nickname' => $this->profile->nickname)), - 'class' => 'mores'), + 'class' => 'more'), _('All groups')); $this->elementEnd('p'); } diff --git a/lib/groupeditform.php b/lib/groupeditform.php index f6e326078..14205d250 100644 --- a/lib/groupeditform.php +++ b/lib/groupeditform.php @@ -78,9 +78,9 @@ class GroupEditForm extends Form function id() { if ($this->group) { - return 'group_edit-' . $this->group->id; + return 'form_group_edit-' . $this->group->id; } else { - return 'group_add'; + return 'form_group_add'; } } @@ -92,7 +92,7 @@ class GroupEditForm extends Form function formClass() { - return 'form_group_add'; + return 'form_settings'; } /** @@ -111,6 +111,18 @@ class GroupEditForm extends Form } } + + /** + * Name of the form + * + * @return void + */ + + function formLegend() + { + $this->out->element('legend', null, _('Create a new group')); + } + /** * Data elements of the form * diff --git a/lib/groupminilist.php b/lib/groupminilist.php index e4d4c68fd..f40a67b0c 100644 --- a/lib/groupminilist.php +++ b/lib/groupminilist.php @@ -49,7 +49,7 @@ class GroupMiniList extends GroupList { function show() { - $this->out->elementStart('ul', 'groups'); + $this->out->elementStart('ul', 'groups xoxo'); $cnt = 0; @@ -73,7 +73,7 @@ class GroupMiniList extends GroupList $this->group->fullname : $this->group->nickname, 'href' => $this->group->homeUrl(), - 'rel' => 'contact', + 'rel' => 'contact group', 'class' => 'url')); $logo = ($this->group->stream_logo) ? $this->group->stream_logo : User_group::defaultLogo(AVATAR_STREAM_SIZE); @@ -85,7 +85,7 @@ class GroupMiniList extends GroupList 'alt' => ($this->group->fullname) ? $this->group->fullname : $this->group->nickname)); - $this->out->element('span', 'fn nickname', $this->group->nickname); + $this->out->element('span', 'fn org nickname', $this->group->nickname); $this->out->elementEnd('a'); $this->out->elementEnd('li'); } diff --git a/lib/profileminilist.php b/lib/profileminilist.php index c6970f808..f157a5529 100644 --- a/lib/profileminilist.php +++ b/lib/profileminilist.php @@ -49,7 +49,7 @@ class ProfileMiniList extends ProfileList { function show() { - $this->out->elementStart('ul', 'users'); + $this->out->elementStart('ul', 'users xoxo'); $cnt = 0; @@ -73,7 +73,7 @@ class ProfileMiniList extends ProfileList $this->profile->fullname : $this->profile->nickname, 'href' => $this->profile->profileurl, - 'rel' => 'contact', + 'rel' => 'contact member', 'class' => 'url')); $avatar = $this->profile->getAvatar(AVATAR_MINI_SIZE); $this->out->element('img', array('src' => (($avatar) ? common_avatar_display_url($avatar) : common_default_avatar(AVATAR_MINI_SIZE)), diff --git a/theme/base/css/display.css b/theme/base/css/display.css index cfe445a98..287dd8140 100644 --- a/theme/base/css/display.css +++ b/theme/base/css/display.css @@ -149,7 +149,8 @@ font-weight:bold; #form_login legend, #form_register legend, #form_password legend, -#form_settings_avatar legend { +#form_settings_avatar legend, +#form_group_add legend { display:none; } @@ -189,6 +190,8 @@ border-radius:4px; padding:0 7px; } + + /* FORM SETTINGS */ @@ -691,9 +694,8 @@ margin-right:7px; margin-bottom:7px; } #user_subscriptions .users li .photo { -width:24px; -height:24px; margin-right:0; +margin-bottom:0; } #user_subscriptions .users li .fn { display:none; -- cgit v1.2.3-54-g00ecf From d72706ce9d44a12b27727b10cf570dfea7c7f896 Mon Sep 17 00:00:00 2001 From: sarven Date: Wed, 21 Jan 2009 23:33:52 +0000 Subject: Changed to @class entity_profile from @id user_profile. --- actions/showgroup.php | 3 +- actions/showstream.php | 2 +- lib/profilelist.php | 3 +- theme/base/css/display.css | 76 +++++++++++++++++++++++++++------------------- 4 files changed, 47 insertions(+), 37 deletions(-) diff --git a/actions/showgroup.php b/actions/showgroup.php index bd9d4f175..41804c6ae 100644 --- a/actions/showgroup.php +++ b/actions/showgroup.php @@ -195,8 +195,7 @@ class ShowgroupAction extends Action function showGroupProfile() { - $this->elementStart('div', array('id' => 'user_profile', - 'class' => 'vcard author')); + $this->elementStart('div', 'entity_profile vcard author'); $this->element('h2', null, _('Group profile')); diff --git a/actions/showstream.php b/actions/showstream.php index b2b8b344c..20d429679 100644 --- a/actions/showstream.php +++ b/actions/showstream.php @@ -227,7 +227,7 @@ class ShowstreamAction extends Action function showProfile() { - $this->elementStart('div', array('id' => 'user_profile', 'class' => 'vcard author')); + $this->elementStart('div', 'entity_profile vcard author'); $this->element('h2', null, _('User profile')); $avatar = $this->profile->getAvatar(AVATAR_PROFILE_SIZE); diff --git a/lib/profilelist.php b/lib/profilelist.php index f7ed5d19c..403cfe065 100644 --- a/lib/profilelist.php +++ b/lib/profilelist.php @@ -93,8 +93,7 @@ class ProfileList extends Widget $user = common_current_user(); - $this->out->elementStart('div', array('id' => 'user_profile', - 'class' => 'vcard')); + $this->out->elementStart('div', 'entity_profile vcard'); $avatar = $this->profile->getAvatar(AVATAR_STREAM_SIZE); $this->out->elementStart('a', array('href' => $this->profile->profileurl, diff --git a/theme/base/css/display.css b/theme/base/css/display.css index 287dd8140..ab287c04f 100644 --- a/theme/base/css/display.css +++ b/theme/base/css/display.css @@ -150,7 +150,8 @@ font-weight:bold; #form_register legend, #form_password legend, #form_settings_avatar legend, -#form_group_add legend { +#newgroup legend, +#editgroup legend { display:none; } @@ -448,7 +449,7 @@ margin-left:4px; #form_notice .form_note { position:absolute; -top:120px; +top:118px; right:98px; z-index:9; } @@ -460,6 +461,7 @@ display:none; #notice_text-count { font-weight:bold; line-height:1.15; +padding:1px 2px; } #form_notice #notice_data-attach_view { @@ -508,7 +510,7 @@ float:left; /* user_profile */ -#user_profile { +.entity_profile { position:relative; width:475px; min-height:123px; @@ -516,23 +518,23 @@ float:left; margin-bottom:17px; margin-left:0; } -#user_profile dt, +.entity_profile dt, #user_statistics dt { font-weight:bold; } -#user_profile .user_depiction { +.entity_profile .user_depiction { float:left; position:absolute; top:0; left:0; width:96px; } -#user_profile .user_fn, -#user_profile .user_nickname, -#user_profile .user_location, -#user_profile .user_url, -#user_profile .user_note, -#user_profile .user_tags { +.entity_profile .user_fn, +.entity_profile .user_nickname, +.entity_profile .user_location, +.entity_profile .user_url, +.entity_profile .user_note, +.entity_profile .user_tags { float:left; clear:left; margin-left:113px; @@ -540,37 +542,37 @@ width:322px; margin-bottom:4px; } -#user_profile .user_fn, -#user_profile .user_nickname { +.entity_profile .user_fn, +.entity_profile .user_nickname { width:auto; clear:none; } -#user_profile .user_fn { +.entity_profile .user_fn { margin-left:11px; margin-right:4px; } -#user_profile .user_fn .fn { +.entity_profile .user_fn .fn { font-weight:bold; font-style:normal; } -#user_profile .nickname { +.entity_profile .nickname { font-style:italic; font-weight:bold; } -#user_profile .user_fn dd:before { +.entity_profile .user_fn dd:before { content: "("; font-weight:normal; } -#user_profile .user_fn dd:after { +.entity_profile .user_fn dd:after { content: ")"; font-weight:normal; } -#user_profile dt { +.entity_profile dt { display:none; } -#user_profile h2 { +.entity_profile h2 { display:none; } @@ -664,6 +666,8 @@ float:left; .aside .section { margin-bottom:29px; clear:both; +float:left; +width:100%; } .aside .section h2 { text-transform:uppercase; @@ -680,24 +684,25 @@ content: ":"; #user_subscriptions, -#user_subscriptions-common { -float:left; +#user_subscribers, +#user_groups, { + } -#user_subscriptions ul.users { +.section ul.users { width:220px; float:left; } -#user_subscriptions .users li { +.section .users li { list-style-type:none; float:left; margin-right:7px; margin-bottom:7px; } -#user_subscriptions .users li .photo { +.section .users li .photo { margin-right:0; margin-bottom:0; } -#user_subscriptions .users li .fn { +.section .users li .fn { display:none; } .aside .section .more { @@ -706,29 +711,36 @@ clear:both; -.profile #user_profile { +.profile .entity_profile { margin-bottom:0; min-height:60px; } +.profile .form_user_subscribe, .profile .form_user_unsubscribe { float:right; } +.profile .form_user_subscribe legend, +.profile .form_user_unsubscribe legend { +display:none; +} + + .profiles { list-style-type:none; } -.profile #user_profile .user_location { +.profile .entity_profile .user_location { width:auto; clear:none; margin-left:11px; } -.profile #user_profile dl, -.profile #user_profile dd { +.profile .entity_profile dl, +.profile .entity_profile dd { display:inline; float:none; } -.profile #user_profile .user_note, -.profile #user_profile .user_url { +.profile .entity_profile .user_note, +.profile .entity_profile .user_url { margin-left:59px; clear:none; display:block; -- cgit v1.2.3-54-g00ecf From a57f12b06c9972b4935b7e21a4c9ea1f34647eb3 Mon Sep 17 00:00:00 2001 From: sarven Date: Thu, 22 Jan 2009 00:04:13 +0000 Subject: selector name cleanup --- actions/showgroup.php | 22 ++++----- actions/showstream.php | 47 +++++++++---------- lib/blockform.php | 2 +- lib/groupminilist.php | 2 +- lib/profilelist.php | 10 ++-- lib/profileminilist.php | 2 +- theme/base/css/display.css | 101 ++++++++++++++++++----------------------- theme/identica/css/display.css | 8 ++-- 8 files changed, 91 insertions(+), 103 deletions(-) diff --git a/actions/showgroup.php b/actions/showgroup.php index 41804c6ae..1af080c7e 100644 --- a/actions/showgroup.php +++ b/actions/showgroup.php @@ -199,7 +199,7 @@ class ShowgroupAction extends Action $this->element('h2', null, _('Group profile')); - $this->elementStart('dl', 'user_depiction'); + $this->elementStart('dl', 'entity_depiction'); $this->element('dt', null, _('Avatar')); $this->elementStart('dd'); @@ -214,10 +214,10 @@ class ShowgroupAction extends Action $this->elementEnd('dd'); $this->elementEnd('dl'); - $this->elementStart('dl', 'user_nickname'); + $this->elementStart('dl', 'entity_nickname'); $this->element('dt', null, _('Nickname')); $this->elementStart('dd'); - $hasFN = ($this->group->fullname) ? 'nickname url uid' : 'fn nickname url uid'; + $hasFN = ($this->group->fullname) ? 'nickname url uid' : 'fn org nickname url uid'; $this->element('a', array('href' => $this->group->homeUrl(), 'rel' => 'me', 'class' => $hasFN), $this->group->nickname); @@ -225,23 +225,23 @@ class ShowgroupAction extends Action $this->elementEnd('dl'); if ($this->group->fullname) { - $this->elementStart('dl', 'user_fn'); + $this->elementStart('dl', 'entity_fn'); $this->element('dt', null, _('Full name')); $this->elementStart('dd'); - $this->element('span', 'fn', $this->group->fullname); + $this->element('span', 'fn org', $this->group->fullname); $this->elementEnd('dd'); $this->elementEnd('dl'); } if ($this->group->location) { - $this->elementStart('dl', 'user_location'); + $this->elementStart('dl', 'entity_location'); $this->element('dt', null, _('Location')); $this->element('dd', 'location', $this->group->location); $this->elementEnd('dl'); } if ($this->group->homepage) { - $this->elementStart('dl', 'user_url'); + $this->elementStart('dl', 'entity_url'); $this->element('dt', null, _('URL')); $this->elementStart('dd'); $this->element('a', array('href' => $this->group->homepage, @@ -252,7 +252,7 @@ class ShowgroupAction extends Action } if ($this->group->description) { - $this->elementStart('dl', 'user_note'); + $this->elementStart('dl', 'entity_note'); $this->element('dt', null, _('Note')); $this->element('dd', 'note', $this->group->description); $this->elementEnd('dl'); @@ -260,10 +260,10 @@ class ShowgroupAction extends Action $this->elementEnd('div'); - $this->elementStart('div', array('id' => 'user_actions')); + $this->elementStart('div', 'entity_actions'); $this->element('h2', null, _('Group actions')); $this->elementStart('ul'); - $this->elementStart('li', array('id' => 'user_subscribe')); + $this->elementStart('li', array('id' => 'entity_subscribe')); $cur = common_current_user(); if ($cur) { if ($cur->isMember($this->group)) { @@ -341,7 +341,7 @@ class ShowgroupAction extends Action return; } - $this->elementStart('div', array('id' => 'user_subscriptions', + $this->elementStart('div', array('id' => 'entity_subscriptions', 'class' => 'section')); $this->element('h2', null, _('Members')); diff --git a/actions/showstream.php b/actions/showstream.php index 20d429679..f853f277d 100644 --- a/actions/showstream.php +++ b/actions/showstream.php @@ -169,14 +169,14 @@ class ShowstreamAction extends Action $this->element('link', array('rel' => 'alternate', 'href' => common_local_url('api', array('apiaction' => 'statuses', - 'method' => 'user_timeline.rss', + 'method' => 'entity_timeline.rss', 'argument' => $this->user->nickname)), 'type' => 'application/rss+xml', 'title' => sprintf(_('Notice feed for %s'), $this->user->nickname))); $this->element('link', array('rel' => 'alternate feed', 'href' => common_local_url('api', array('apiaction' => 'statuses', - 'method' => 'user_timeline.atom', + 'method' => 'entity_timeline.atom', 'argument' => $this->user->nickname)), 'type' => 'application/atom+xml', 'title' => sprintf(_('Notice feed for %s'), $this->user->nickname))); @@ -231,7 +231,7 @@ class ShowstreamAction extends Action $this->element('h2', null, _('User profile')); $avatar = $this->profile->getAvatar(AVATAR_PROFILE_SIZE); - $this->elementStart('dl', 'user_depiction'); + $this->elementStart('dl', 'entity_depiction'); $this->element('dt', null, _('Photo')); $this->elementStart('dd'); $this->element('img', array('src' => ($avatar) ? common_avatar_display_url($avatar) : common_default_avatar(AVATAR_PROFILE_SIZE), @@ -242,7 +242,7 @@ class ShowstreamAction extends Action $this->elementEnd('dd'); $this->elementEnd('dl'); - $this->elementStart('dl', 'user_nickname'); + $this->elementStart('dl', 'entity_nickname'); $this->element('dt', null, _('Nickname')); $this->elementStart('dd'); $hasFN = ($this->profile->fullname) ? 'nickname url uid' : 'fn nickname url uid'; @@ -253,7 +253,7 @@ class ShowstreamAction extends Action $this->elementEnd('dl'); if ($this->profile->fullname) { - $this->elementStart('dl', 'user_fn'); + $this->elementStart('dl', 'entity_fn'); $this->element('dt', null, _('Full name')); $this->elementStart('dd'); $this->element('span', 'fn', $this->profile->fullname); @@ -262,14 +262,14 @@ class ShowstreamAction extends Action } if ($this->profile->location) { - $this->elementStart('dl', 'user_location'); + $this->elementStart('dl', 'entity_location'); $this->element('dt', null, _('Location')); $this->element('dd', 'location', $this->profile->location); $this->elementEnd('dl'); } if ($this->profile->homepage) { - $this->elementStart('dl', 'user_url'); + $this->elementStart('dl', 'entity_url'); $this->element('dt', null, _('URL')); $this->elementStart('dd'); $this->element('a', array('href' => $this->profile->homepage, @@ -280,7 +280,7 @@ class ShowstreamAction extends Action } if ($this->profile->bio) { - $this->elementStart('dl', 'user_note'); + $this->elementStart('dl', 'entity_note'); $this->element('dt', null, _('Note')); $this->element('dd', 'note', $this->profile->bio); $this->elementEnd('dl'); @@ -288,7 +288,7 @@ class ShowstreamAction extends Action $tags = Profile_tag::getTags($this->profile->id, $this->profile->id); if (count($tags) > 0) { - $this->elementStart('dl', 'user_tags'); + $this->elementStart('dl', 'entity_tags'); $this->element('dt', null, _('Tags')); $this->elementStart('dd'); $this->elementStart('ul', 'tags xoxo'); @@ -307,10 +307,11 @@ class ShowstreamAction extends Action } $this->elementEnd('div'); - $this->elementStart('div', array('id' => 'user_actions')); + //XXX: entity_actions doesn't need to be outputted if entity is looking at their own profile + $this->elementStart('div', 'entity_actions'); $this->element('h2', null, _('User actions')); $this->elementStart('ul'); - $this->elementStart('li', array('id' => 'user_subscribe')); + $this->elementStart('li', array('id' => 'entity_subscribe')); $cur = common_current_user(); if ($cur) { if ($cur->id != $this->profile->id) { @@ -331,14 +332,14 @@ class ShowstreamAction extends Action $user = User::staticGet('id', $this->profile->id); if ($cur && $cur->id != $user->id && $cur->mutuallySubscribed($user)) { - $this->elementStart('li', array('id' => 'user_send-a-message')); + $this->elementStart('li', array('id' => 'entity_send-a-message')); $this->element('a', array('href' => common_local_url('newmessage', array('to' => $user->id)), 'title' => _('Send a direct message to this user')), _('Message')); $this->elementEnd('li'); if ($user->email && $user->emailnotifynudge) { - $this->elementStart('li', array('id' => 'user_nudge')); + $this->elementStart('li', array('id' => 'entity_nudge')); $nf = new NudgeForm($this, $user); $nf->show(); $this->elementEnd('li'); @@ -347,7 +348,7 @@ class ShowstreamAction extends Action if ($cur && $cur->id != $this->profile->id) { $blocked = $cur->hasBlocked($this->profile); - $this->elementStart('li', array('id' => 'user_block')); + $this->elementStart('li', array('id' => 'entity_block')); if ($blocked) { $ubf = new UnblockForm($this, $this->profile); $ubf->show(); @@ -366,7 +367,7 @@ class ShowstreamAction extends Action $url = common_local_url('remotesubscribe', array('nickname' => $this->profile->nickname)); $this->element('a', array('href' => $url, - 'id' => 'user_subscribe_remote'), + 'id' => 'entity_subscribe_remote'), _('Subscribe')); } @@ -393,7 +394,7 @@ class ShowstreamAction extends Action { $profile = $this->user->getSubscriptions(0, PROFILES_PER_MINILIST + 1); - $this->elementStart('div', array('id' => 'user_subscriptions', + $this->elementStart('div', array('id' => 'entity_subscriptions', 'class' => 'section')); $this->element('h2', null, _('Subscriptions')); @@ -422,7 +423,7 @@ class ShowstreamAction extends Action { $profile = $this->user->getSubscribers(0, PROFILES_PER_MINILIST + 1); - $this->elementStart('div', array('id' => 'user_subscribers', + $this->elementStart('div', array('id' => 'entity_subscribers', 'class' => 'section')); $this->element('h2', null, _('Subscribers')); @@ -462,19 +463,19 @@ class ShowstreamAction extends Action $notices->profile_id = $this->profile->id; $notice_count = (int) $notices->count(); - $this->elementStart('div', array('id' => 'user_statistics', + $this->elementStart('div', array('id' => 'entity_statistics', 'class' => 'section')); $this->element('h2', null, _('Statistics')); // Other stats...? - $this->elementStart('dl', 'user_member-since'); + $this->elementStart('dl', 'entity_member-since'); $this->element('dt', null, _('Member since')); $this->element('dd', null, date('j M Y', strtotime($this->profile->created))); $this->elementEnd('dl'); - $this->elementStart('dl', 'user_subscriptions'); + $this->elementStart('dl', 'entity_subscriptions'); $this->elementStart('dt'); $this->element('a', array('href' => common_local_url('subscriptions', array('nickname' => $this->profile->nickname))), @@ -483,7 +484,7 @@ class ShowstreamAction extends Action $this->element('dd', null, (is_int($subs_count)) ? $subs_count : '0'); $this->elementEnd('dl'); - $this->elementStart('dl', 'user_subscribers'); + $this->elementStart('dl', 'entity_subscribers'); $this->elementStart('dt'); $this->element('a', array('href' => common_local_url('subscribers', array('nickname' => $this->profile->nickname))), @@ -492,7 +493,7 @@ class ShowstreamAction extends Action $this->element('dd', 'subscribers', (is_int($subbed_count)) ? $subbed_count : '0'); $this->elementEnd('dl'); - $this->elementStart('dl', 'user_notices'); + $this->elementStart('dl', 'entity_notices'); $this->element('dt', null, _('Notices')); $this->element('dd', null, (is_int($notice_count)) ? $notice_count : '0'); $this->elementEnd('dl'); @@ -504,7 +505,7 @@ class ShowstreamAction extends Action { $groups = $this->user->getGroups(0, GROUPS_PER_MINILIST + 1); - $this->elementStart('div', array('id' => 'user_groups', + $this->elementStart('div', array('id' => 'entity_groups', 'class' => 'section')); $this->element('h2', null, _('Groups')); diff --git a/lib/blockform.php b/lib/blockform.php index ea22c1cec..af766b823 100644 --- a/lib/blockform.php +++ b/lib/blockform.php @@ -150,6 +150,6 @@ class BlockForm extends Form function formActions() { - $this->out->submit('submit', _('block'), 'submit', null, _('Block this user')); + $this->out->submit('submit', _('Block'), 'submit', null, _('Block this user')); } } diff --git a/lib/groupminilist.php b/lib/groupminilist.php index f40a67b0c..fe38d0340 100644 --- a/lib/groupminilist.php +++ b/lib/groupminilist.php @@ -49,7 +49,7 @@ class GroupMiniList extends GroupList { function show() { - $this->out->elementStart('ul', 'groups xoxo'); + $this->out->elementStart('ul', 'entities groups xoxo'); $cnt = 0; diff --git a/lib/profilelist.php b/lib/profilelist.php index 403cfe065..73c129efe 100644 --- a/lib/profilelist.php +++ b/lib/profilelist.php @@ -112,7 +112,7 @@ class ProfileList extends Widget $this->out->elementEnd('a'); if ($this->profile->fullname) { - $this->out->elementStart('dl', 'user_fn'); + $this->out->elementStart('dl', 'entity_fn'); $this->out->element('dt', null, 'Full name'); $this->out->elementStart('dd'); $this->out->elementStart('span', 'fn'); @@ -122,7 +122,7 @@ class ProfileList extends Widget $this->out->elementEnd('dl'); } if ($this->profile->location) { - $this->out->elementStart('dl', 'user_location'); + $this->out->elementStart('dl', 'entity_location'); $this->out->element('dt', null, _('Location')); $this->out->elementStart('dd', 'location'); $this->out->raw($this->highlight($this->profile->location)); @@ -130,7 +130,7 @@ class ProfileList extends Widget $this->out->elementEnd('dl'); } if ($this->profile->homepage) { - $this->out->elementStart('dl', 'user_url'); + $this->out->elementStart('dl', 'entity_url'); $this->out->element('dt', null, _('URL')); $this->out->elementStart('dd'); $this->out->elementStart('a', array('href' => $this->profile->homepage, @@ -141,7 +141,7 @@ class ProfileList extends Widget $this->out->elementEnd('dl'); } if ($this->profile->bio) { - $this->out->elementStart('dl', 'user_note'); + $this->out->elementStart('dl', 'entity_note'); $this->out->element('dt', null, _('Note')); $this->out->elementStart('dd', 'note'); $this->out->raw($this->highlight($this->profile->bio)); @@ -155,7 +155,7 @@ class ProfileList extends Widget # Get tags $tags = Profile_tag::getTags($this->owner->id, $this->profile->id); - $this->out->elementStart('dl', 'user_tags'); + $this->out->elementStart('dl', 'entity_tags'); $this->out->elementStart('dt'); if ($user->id == $this->owner->id) { $this->out->element('a', array('href' => common_local_url('tagother', diff --git a/lib/profileminilist.php b/lib/profileminilist.php index f157a5529..56b768419 100644 --- a/lib/profileminilist.php +++ b/lib/profileminilist.php @@ -49,7 +49,7 @@ class ProfileMiniList extends ProfileList { function show() { - $this->out->elementStart('ul', 'users xoxo'); + $this->out->elementStart('ul', 'entities users xoxo'); $cnt = 0; diff --git a/theme/base/css/display.css b/theme/base/css/display.css index ab287c04f..c622e2f22 100644 --- a/theme/base/css/display.css +++ b/theme/base/css/display.css @@ -509,7 +509,7 @@ float:left; -/* user_profile */ +/* entity_profile */ .entity_profile { position:relative; width:475px; @@ -519,22 +519,22 @@ margin-bottom:17px; margin-left:0; } .entity_profile dt, -#user_statistics dt { +#entity_statistics dt { font-weight:bold; } -.entity_profile .user_depiction { +.entity_profile .entity_depiction { float:left; position:absolute; top:0; left:0; width:96px; } -.entity_profile .user_fn, -.entity_profile .user_nickname, -.entity_profile .user_location, -.entity_profile .user_url, -.entity_profile .user_note, -.entity_profile .user_tags { +.entity_profile .entity_fn, +.entity_profile .entity_nickname, +.entity_profile .entity_location, +.entity_profile .entity_url, +.entity_profile .entity_note, +.entity_profile .entity_tags { float:left; clear:left; margin-left:113px; @@ -542,16 +542,16 @@ width:322px; margin-bottom:4px; } -.entity_profile .user_fn, -.entity_profile .user_nickname { +.entity_profile .entity_fn, +.entity_profile .entity_nickname { width:auto; clear:none; } -.entity_profile .user_fn { +.entity_profile .entity_fn { margin-left:11px; margin-right:4px; } -.entity_profile .user_fn .fn { +.entity_profile .entity_fn .fn { font-weight:bold; font-style:normal; } @@ -560,11 +560,11 @@ font-style:italic; font-weight:bold; } -.entity_profile .user_fn dd:before { +.entity_profile .entity_fn dd:before { content: "("; font-weight:normal; } -.entity_profile .user_fn dd:after { +.entity_profile .entity_fn dd:after { content: ")"; font-weight:normal; } @@ -576,47 +576,47 @@ display:none; display:none; } -/* user_profile */ +/* entity_profile */ -/*user_actions*/ -#user_actions { +/*entity_actions*/ +.entity_actions { clear:left; float:left; position:absolute; top:0; right:0; } -#user_actions h2 { +.entity_actions h2 { display:none; } -#user_actions ul { +.entity_actions ul { list-style-type:none; } -#user_actions li { +.entity_actions li { margin-bottom:4px; } -#user_actions li:first-child { +.entity_actions li:first-child { border-top:0; } -#user_actions fieldset { +.entity_actions fieldset { border:0; padding:0; } -#user_actions legend { +.entity_actions legend { display:none; } -#user_actions input.submit { +.entity_actions input.submit { display:block; text-align:left; cursor:pointer; width:100%; } -#user_actions a { +.entity_actions a { text-decoration:none; font-weight:bold; width:100%; @@ -627,35 +627,22 @@ display:block; .form_user_block input.submit, .form_user_unblock input.submit, -#user_send-a-message a, +#entity_send-a-message a, .form_user_nudge input.submit { border:0; padding-left:20px; } -#user_send-a-message a { +#entity_send-a-message a { padding:4px 4px 4px 23px; - -} - - -#user_subscribe input.submit, -.form_user_subscribe input.submit { - } -#user_send-a-message form { -} - -#user_send-a-message textarea { -} - -.user_tags ul { +.entity_tags ul { list-style-type:none; } -.user_tags li { +.entity_tags li { display:inline; margin-right:1em; float:left; @@ -674,11 +661,11 @@ text-transform:uppercase; font-size:1em; } -#user_statistics dt, -#user_statistics dd { +#entity_statistics dt, +#entity_statistics dd { display:inline; } -#user_statistics dt:after { +#entity_statistics dt:after { content: ":"; } @@ -688,21 +675,21 @@ content: ":"; #user_groups, { } -.section ul.users { +.section ul.entities { width:220px; float:left; } -.section .users li { +.section .entities li { list-style-type:none; float:left; margin-right:7px; margin-bottom:7px; } -.section .users li .photo { +.section .entities li .photo { margin-right:0; margin-bottom:0; } -.section .users li .fn { +.section .entities li .fn { display:none; } .aside .section .more { @@ -729,7 +716,7 @@ display:none; .profiles { list-style-type:none; } -.profile .entity_profile .user_location { +.profile .entity_profile .entity_location { width:auto; clear:none; margin-left:11px; @@ -739,8 +726,8 @@ margin-left:11px; display:inline; float:none; } -.profile .entity_profile .user_note, -.profile .entity_profile .user_url { +.profile .entity_profile .entity_note, +.profile .entity_profile .entity_url { margin-left:59px; clear:none; display:block; @@ -1065,9 +1052,9 @@ background-color:#D1D9E4; -#user_actions #user_subscribe .form_note, -#user_actions #user_subscribe .form_data, -#user_actions #user_subscribe .form_actions label { +.entity_actions #user_subscribe .form_note, +.entity_actions #user_subscribe .form_data, +.entity_actions #user_subscribe .form_actions label { display:none; } #form_user-relationship .form_note, @@ -1076,7 +1063,7 @@ display:none; display:block; } -#user_actions #user-relationship_submit { +.entity_actions #user-relationship_submit { margin-bottom:0; } #form_user-relationship .form_data li label { diff --git a/theme/identica/css/display.css b/theme/identica/css/display.css index 2b91c5504..c702c77e6 100644 --- a/theme/identica/css/display.css +++ b/theme/identica/css/display.css @@ -42,7 +42,7 @@ a, div.notice-options input, .form_user_block input.submit, .form_user_unblock input.submit, -#user_send-a-message a, +#entity_send-a-message a, .form_user_nudge input.submit { color:#002E6E; } @@ -55,7 +55,7 @@ background-color:#fcfffc; } #aside_primary, -#user_subscribe a, +#entity_subscribe a, #TB_window input.submit, .form_user_subscribe input.submit { background-color:#CEE1E9; @@ -132,7 +132,7 @@ background-image:url(../../base/images/icons/icon_vcard.gif); } -#user_send-a-message a, +#entity_send-a-message a, .form_user_nudge input.submit, .form_user_block input.submit, .form_user_unblock input.submit { @@ -149,7 +149,7 @@ color:#fff; background-color:#97BFD1; } -#user_send-a-message a { +#entity_send-a-message a { background-image:url(../images/icons/twotone/green/quote.gif); } .form_user_nudge input.submit { -- cgit v1.2.3-54-g00ecf From 07b52e19beff39a7f7cb5de4ebb199f2d894ad08 Mon Sep 17 00:00:00 2001 From: sarven Date: Thu, 22 Jan 2009 00:12:16 +0000 Subject: Minor cleanup for future groups_related --- actions/showstream.php | 2 +- theme/base/css/display.css | 12 ++++++------ 2 files changed, 7 insertions(+), 7 deletions(-) diff --git a/actions/showstream.php b/actions/showstream.php index f853f277d..1ea84cf21 100644 --- a/actions/showstream.php +++ b/actions/showstream.php @@ -384,10 +384,10 @@ class ShowstreamAction extends Action function showSections() { - $this->showStatistics(); $this->showSubscriptions(); $this->showSubscribers(); $this->showGroups(); + $this->showStatistics(); } function showSubscriptions() diff --git a/theme/base/css/display.css b/theme/base/css/display.css index c622e2f22..253cbfa38 100644 --- a/theme/base/css/display.css +++ b/theme/base/css/display.css @@ -1194,34 +1194,34 @@ margin-bottom:0; -.section .groups, +#groups_related ul, #users_featured ul { list-style-type:none; } -.section .groups li, +#groups_related li, #users_featured li { margin-top:11px; float:left; width:100%; } -.section .groups li:first-child, +#groups_related li:first-child, #users_featured li:first-child { margin-top:0; } -.section .groups .vcard, +#groups_related .vcard, #users_featured .vcard { float:left; margin-bottom:-23px; } -.section .groups dl, +#groups_related dl, #users_featured dl { float:left; margin-left:63px; clear:left; } -.section .groups dt, +#groups_related dt, #users_featured dt { display:none; font-weight:bold; -- cgit v1.2.3-54-g00ecf From 7f25b9db4bce69e076ab6447a4070d1cb7c3651a Mon Sep 17 00:00:00 2001 From: Robin Millette Date: Thu, 22 Jan 2009 04:22:32 +0000 Subject: phpdocs --- lib/action.php | 385 ++++++++++++++++++++++++++++++++++++++++++++++++--------- 1 file changed, 328 insertions(+), 57 deletions(-) diff --git a/lib/action.php b/lib/action.php index 5987abf3c..bf053424f 100644 --- a/lib/action.php +++ b/lib/action.php @@ -53,7 +53,6 @@ require_once INSTALLDIR.'/lib/htmloutputter.php'; * * @see HTMLOutputter */ - class Action extends HTMLOutputter // lawsuit { var $args; @@ -69,20 +68,30 @@ class Action extends HTMLOutputter // lawsuit * @see XMLOutputter::__construct * @see HTMLOutputter::__construct */ - function __construct($output='php://output', $indent=true) { parent::__construct($output, $indent); } - // For initializing members of the class + /** + * For initializing members of the class. + * + * @param array $argarray misc. arguments + * + * @return boolean true + */ function prepare($argarray) { $this->args =& common_copy_args($argarray); return true; } + /** + * Show page, a template method. + * + * @return nothing + */ function showPage() { $this->startHTML(); @@ -91,6 +100,11 @@ class Action extends HTMLOutputter // lawsuit $this->endHTML(); } + /** + * Show head, a template method. + * + * @return nothing + */ function showHead() { // XXX: attributes (profile?) @@ -105,6 +119,11 @@ class Action extends HTMLOutputter // lawsuit $this->elementEnd('head'); } + /** + * Show title, a template method. + * + * @return nothing + */ function showTitle() { $this->element('title', null, @@ -113,13 +132,24 @@ class Action extends HTMLOutputter // lawsuit common_config('site', 'name'))); } - // SHOULD overload + /** + * Returns the page title + * + * SHOULD overload + * + * @return string page title + */ function title() { return _("Untitled page"); } + /** + * Show stylesheets + * + * @return nothing + */ function showStylesheets() { $this->element('link', array('rel' => 'stylesheet', @@ -145,6 +175,11 @@ class Action extends HTMLOutputter // lawsuit } } + /** + * Show javascript headers + * + * @return nothing + */ function showScripts() { $this->element('script', array('type' => 'text/javascript', @@ -161,38 +196,66 @@ class Action extends HTMLOutputter // lawsuit ' '); } + /** + * Show OpenSearch headers + * + * @return nothing + */ function showOpenSearch() { - $this->element('link', array('rel' => 'search', 'type' => 'application/opensearchdescription+xml', + $this->element('link', array('rel' => 'search', + 'type' => 'application/opensearchdescription+xml', 'href' => common_local_url('opensearch', array('type' => 'people')), 'title' => common_config('site', 'name').' People Search')); - $this->element('link', array('rel' => 'search', 'type' => 'application/opensearchdescription+xml', 'href' => common_local_url('opensearch', array('type' => 'notice')), 'title' => common_config('site', 'name').' Notice Search')); } - // MAY overload - + /** + * Show feed headers + * + * MAY overload + * + * @return nothing + */ function showFeeds() { // does nothing by default } - // SHOULD overload - + /** + * Show description. + * + * SHOULD overload + * + * @return nothing + */ function showDescription() { // does nothing by default } - // MAY overload - + /** + * Show extra stuff in . + * + * MAY overload + * + * @return nothing + */ function extraHead() { // does nothing by default } + + /** + * Show body. + * + * Calls template methods + * + * @return nothing + */ function showBody() { $this->elementStart('body', array('id' => $this->trimmed('action'))); @@ -204,6 +267,13 @@ class Action extends HTMLOutputter // lawsuit $this->elementEnd('body'); } + /** + * Show header of the page. + * + * Calls template methods + * + * @return nothing + */ function showHeader() { $this->elementStart('div', array('id' => 'header')); @@ -218,14 +288,18 @@ class Action extends HTMLOutputter // lawsuit $this->elementEnd('div'); } + /** + * Show configured logo. + * + * @return nothing + */ function showLogo() { $this->elementStart('address', array('id' => 'site_contact', 'class' => 'vcard')); $this->elementStart('a', array('class' => 'url home bookmark', 'href' => common_local_url('public'))); - if (common_config('site', 'logo') || file_exists(theme_file('logo.png'))) - { + if (common_config('site', 'logo') || file_exists(theme_file('logo.png'))) { $this->element('img', array('class' => 'logo photo', 'src' => (common_config('site', 'logo')) ? common_config('site', 'logo') : theme_path('logo.png'), 'alt' => common_config('site', 'name'))); @@ -235,6 +309,11 @@ class Action extends HTMLOutputter // lawsuit $this->elementEnd('address'); } + /** + * Show primary navigation. + * + * @return nothing + */ function showPrimaryNav() { $this->elementStart('dl', array('id' => 'site_nav_global_primary')); @@ -271,10 +350,15 @@ class Action extends HTMLOutputter // lawsuit $this->elementEnd('dd'); $this->elementEnd('dl'); } - - // Revist. Should probably do an hAtom pattern here + + /** + * Show site notice. + * + * @return nothing + */ function showSiteNotice() { + // Revist. Should probably do an hAtom pattern here $text = common_config('site', 'notice'); if ($text) { $this->elementStart('dl', array('id' => 'site_notice', @@ -285,19 +369,38 @@ class Action extends HTMLOutputter // lawsuit } } - // MAY overload if no notice form needed... or direct message box???? - + /** + * Show notice form. + * + * MAY overload if no notice form needed... or direct message box???? + * + * @return nothing + */ function showNoticeForm() { $notice_form = new NoticeForm($this); $notice_form->show(); } - + + /** + * Show anonymous message. + * + * SHOULD overload + * + * @return nothing + */ function showAnonymousMessage() { // needs to be defined by the class } + /** + * Show core. + * + * Shows local navigation, content block and aside. + * + * @return nothing + */ function showCore() { $this->elementStart('div', array('id' => 'core')); @@ -307,6 +410,11 @@ class Action extends HTMLOutputter // lawsuit $this->elementEnd('div'); } + /** + * Show local navigation block. + * + * @return nothing + */ function showLocalNavBlock() { $this->elementStart('dl', array('id' => 'site_nav_local_views')); @@ -317,13 +425,23 @@ class Action extends HTMLOutputter // lawsuit $this->elementEnd('dl'); } - // SHOULD overload - + /** + * Show local navigation. + * + * SHOULD overload + * + * @return nothing + */ function showLocalNav() { // does nothing by default } + /** + * Show content block. + * + * @return nothing + */ function showContentBlock() { $this->elementStart('div', array('id' => 'content')); @@ -336,10 +454,21 @@ class Action extends HTMLOutputter // lawsuit $this->elementEnd('div'); } - function showPageTitle() { - $this->element('h1', NULL, $this->title()); + /** + * Show page title. + * + * @return nothing + */ + function showPageTitle() + { + $this->element('h1', null, $this->title()); } + /** + * Show page notice block. + * + * @return nothing + */ function showPageNoticeBlock() { $this->elementStart('dl', array('id' => 'page_notice', @@ -349,20 +478,35 @@ class Action extends HTMLOutputter // lawsuit $this->showPageNotice(); $this->elementEnd('dd'); $this->elementEnd('dl'); - } - - // SHOULD overload (unless there's not a notice) + } + /** + * Show page notice. + * + * SHOULD overload (unless there's not a notice) + * + * @return nothing + */ function showPageNotice() { } - // MUST overload - + /** + * Show content. + * + * MUST overload (unless there's not a notice) + * + * @return nothing + */ function showContent() { } + /** + * Show Aside. + * + * @return nothing + */ function showAside() { $this->elementStart('div', array('id' => 'aside_primary', @@ -372,8 +516,13 @@ class Action extends HTMLOutputter // lawsuit $this->elementEnd('div'); } - // MAY overload if there are feeds - + /** + * Show export data feeds. + * + * MAY overload if there are feeds + * + * @return nothing + */ function showExportData() { // is there structure to this? @@ -381,12 +530,23 @@ class Action extends HTMLOutputter // lawsuit // can we reuse list of feeds from showFeeds() ? } - // SHOULD overload - - function showSections() { + /** + * Show sections. + * + * SHOULD overload + * + * @return nothing + */ + function showSections() + { // for each section, show it } + /** + * Show footer. + * + * @return nothing + */ function showFooter() { $this->elementStart('div', array('id' => 'footer')); @@ -395,6 +555,11 @@ class Action extends HTMLOutputter // lawsuit $this->elementEnd('div'); } + /** + * Show secondary navigation. + * + * @return nothing + */ function showSecondaryNav() { $this->elementStart('dl', array('id' => 'site_nav_global_secondary')); @@ -418,6 +583,11 @@ class Action extends HTMLOutputter // lawsuit $this->elementEnd('dl'); } + /** + * Show licenses. + * + * @return nothing + */ function showLicenses() { $this->elementStart('dl', array('id' => 'licenses')); @@ -426,6 +596,11 @@ class Action extends HTMLOutputter // lawsuit $this->elementEnd('dl'); } + /** + * Show Laconica license. + * + * @return nothing + */ function showLaconicaLicense() { $this->element('dt', array('id' => 'site_laconica_license'), _('Laconica software license')); @@ -442,6 +617,11 @@ class Action extends HTMLOutputter // lawsuit // do it } + /** + * Show content license. + * + * @return nothing + */ function showContentLicense() { $this->element('dt', array('id' => 'site_content_license'), _('Laconica software license')); @@ -461,24 +641,52 @@ class Action extends HTMLOutputter // lawsuit $this->elementEnd('dd'); } - // For comparison with If-Last-Modified - // If not applicable, return null - + /** + * Return last modified, if applicable. + * + * MAY override + * + * @return string last modified http header + */ function lastModified() { + // For comparison with If-Last-Modified + // If not applicable, return null return null; } + /** + * Return etag, if applicable. + * + * MAY override + * + * @return string etag http header + */ function etag() { return null; } + /** + * Return true if read only. + * + * MAY override + * + * @return boolean is read only action? + */ function isReadOnly() { return false; } + /** + * Returns query argument or default value if not found + * + * @param string $key requested argument + * @param string $def default value to return if $key is not provided + * + * @return boolean is read only action? + */ function arg($key, $def=null) { if (array_key_exists($key, $this->args)) { @@ -488,24 +696,34 @@ class Action extends HTMLOutputter // lawsuit } } + /** + * Returns trimmed query argument or default value if not found + * + * @param string $key requested argument + * @param string $def default value to return if $key is not provided + * + * @return boolean is read only action? + */ function trimmed($key, $def=null) { $arg = $this->arg($key, $def); - return (is_string($arg)) ? trim($arg) : $arg; + return is_string($arg) ? trim($arg) : $arg; } - // Note: argarray ignored, since it's now passed in in prepare() - + /** + * Handler method + * + * @param array $argarray is ignored since it's now passed in in prepare() + * + * @return boolean is read only action? + */ function handle($argarray=null) { - - $lm = $this->lastModified(); + $lm = $this->lastModified(); $etag = $this->etag(); - if ($etag) { header('ETag: ' . $etag); } - if ($lm) { header('Last-Modified: ' . date(DATE_RFC1123, $lm)); $if_modified_since = $_SERVER['HTTP_IF_MODIFIED_SINCE']; @@ -523,11 +741,27 @@ class Action extends HTMLOutputter // lawsuit } } + /** + * HasĀ etag? (private) + * + * @param string $etag etag http header + * @param string $if_none_match ifNoneMatch http header + * + * @return boolean + */ function _hasEtag($etag, $if_none_match) { return ($if_none_match) && in_array($etag, explode(',', $if_none_match)); } + /** + * Boolean understands english (yes, no, true, false) + * + * @param string $key query key we're interested in + * @param string $def default value + * + * @return boolean interprets yes/no strings as boolean + */ function boolean($key, $def=false) { $arg = strtolower($this->trimmed($key)); @@ -543,6 +777,14 @@ class Action extends HTMLOutputter // lawsuit } } + /** + * Server error + * + * @param string $msg error message to display + * @param integer $code http error code, 500 by default + * + * @return nothing + */ function serverError($msg, $code=500) { $action = $this->trimmed('action'); @@ -550,6 +792,14 @@ class Action extends HTMLOutputter // lawsuit common_server_error($msg, $code); } + /** + * Client error + * + * @param string $msg error message to display + * @param integer $code http error code, 400 by default + * + * @return nothing + */ function clientError($msg, $code=400) { $action = $this->trimmed('action'); @@ -557,10 +807,15 @@ class Action extends HTMLOutputter // lawsuit common_user_error($msg, $code); } + /** + * Returns the current URL + * + * @return string current URL + */ function selfUrl() { $action = $this->trimmed('action'); - $args = $this->args; + $args = $this->args; unset($args['action']); foreach (array_keys($_COOKIE) as $cookie) { unset($args[$cookie]); @@ -568,11 +823,21 @@ class Action extends HTMLOutputter // lawsuit return common_local_url($action, $args); } - // Added @id to li for some control. - // XXX: We might want to move this to htmloutputter.php - + /** + * Generate a menu item + * + * @param string $url menu URL + * @param string $text menu name + * @param string $title title attribute, null by default + * @param boolean $is_selected current menu item, false by default + * @param string $id element id, null by default + * + * @return nothing + */ function menuItem($url, $text, $title=null, $is_selected=false, $id=null) { + // Added @id to li for some control. + // XXX: We might want to move this to htmloutputter.php $lattrs = array(); if ($is_selected) { $lattrs['class'] = 'current'; @@ -589,10 +854,20 @@ class Action extends HTMLOutputter // lawsuit $this->elementEnd('li'); } - // Does a little before-after block for next/prev page - + /** + * Generate pagination links + * + * @param boolean $have_before is there something before? + * @param boolean $have_after is there something after? + * @param integer $page current page + * @param string $action current action + * @param array $args rest of query arguments + * + * @return nothing + */ function pagination($have_before, $have_after, $page, $action, $args=null) { + // Does a little before-after block for next/prev page if ($have_before || $have_after) { $this->elementStart('div', array('class' => 'pagination')); $this->elementStart('dl', null); @@ -600,26 +875,22 @@ class Action extends HTMLOutputter // lawsuit $this->elementStart('dd', null); $this->elementStart('ul', array('class' => 'nav')); } - if ($have_before) { - $pargs = array('page' => $page-1); - $newargs = ($args) ? array_merge($args,$pargs) : $pargs; - + $pargs = array('page' => $page-1); + $newargs = $args ? array_merge($args, $pargs) : $pargs; $this->elementStart('li', array('class' => 'nav_prev')); $this->element('a', array('href' => common_local_url($action, $newargs), 'rel' => 'prev'), _('After')); $this->elementEnd('li'); } - if ($have_after) { - $pargs = array('page' => $page+1); - $newargs = ($args) ? array_merge($args,$pargs) : $pargs; + $pargs = array('page' => $page+1); + $newargs = $args ? array_merge($args, $pargs) : $pargs; $this->elementStart('li', array('class' => 'nav_next')); $this->element('a', array('href' => common_local_url($action, $newargs), 'rel' => 'next'), _('Before')); $this->elementEnd('li'); } - if ($have_before || $have_after) { $this->elementEnd('ul'); $this->elementEnd('dd'); -- cgit v1.2.3-54-g00ecf From 1a941d03fdcfcd1319da17c5400fe8972a755091 Mon Sep 17 00:00:00 2001 From: Zach Copley Date: Thu, 22 Jan 2009 04:26:15 +0000 Subject: Added some CSS classes for styling doc pages differently --- actions/doc.php | 20 +++++++++++++++++++- actions/register.php | 19 +++++++++++++++++++ 2 files changed, 38 insertions(+), 1 deletion(-) diff --git a/actions/doc.php b/actions/doc.php index aaf006f07..3755bb051 100644 --- a/actions/doc.php +++ b/actions/doc.php @@ -67,6 +67,25 @@ class DocAction extends Action $this->showPage(); } + // overrrided to add entry-title class + function showPageTitle() { + $this->element('h1', array('class' => 'entry-title'), $this->title()); + } + + // overrided to add hentry, and content-inner classes + function showContentBlock() + { + $this->elementStart('div', array('id' => 'content', 'class' => 'hentry')); + $this->showPageTitle(); + $this->showPageNoticeBlock(); + $this->elementStart('div', array('id' => 'content_inner', + 'class' => 'entry-content')); + // show the actual content (forms, lists, whatever) + $this->showContent(); + $this->elementEnd('div'); + $this->elementEnd('div'); + } + /** * Display content. * @@ -89,4 +108,3 @@ class DocAction extends Action return ucfirst($this->title); } } - diff --git a/actions/register.php b/actions/register.php index 159daaa73..a63da2e0f 100644 --- a/actions/register.php +++ b/actions/register.php @@ -248,6 +248,25 @@ class RegisterAction extends Action return ($user !== false); } + // overrrided to add entry-title class + function showPageTitle() { + $this->element('h1', array('class' => 'entry-title'), $this->title()); + } + + // overrided to add hentry, and content-inner class + function showContentBlock() + { + $this->elementStart('div', array('id' => 'content', 'class' => 'hentry')); + $this->showPageTitle(); + $this->showPageNoticeBlock(); + $this->elementStart('div', array('id' => 'content_inner', + 'class' => 'entry-content')); + // show the actual content (forms, lists, whatever) + $this->showContent(); + $this->elementEnd('div'); + $this->elementEnd('div'); + } + /** * Instructions or a notice for the page * -- cgit v1.2.3-54-g00ecf From 03117fe3e84cfb7badb1f975ec15b8a97d575fd7 Mon Sep 17 00:00:00 2001 From: sarven Date: Thu, 22 Jan 2009 04:35:22 +0000 Subject: Cleanup.. some for IE and other for cascading --- lib/groupeditform.php | 2 +- theme/base/css/display.css | 22 ++++++++++------------ theme/base/css/ie.css | 8 ++++++-- theme/base/css/ie6.css | 8 ++++++++ theme/base/css/ie7.css | 2 +- 5 files changed, 26 insertions(+), 16 deletions(-) create mode 100644 theme/base/css/ie6.css diff --git a/lib/groupeditform.php b/lib/groupeditform.php index 14205d250..fe53918d1 100644 --- a/lib/groupeditform.php +++ b/lib/groupeditform.php @@ -147,7 +147,7 @@ class GroupEditForm extends Form _('URL of the homepage or blog of the group or topic')); $this->out->elementEnd('li'); $this->out->elementStart('li'); - $this->out->textarea('description', _('description'), + $this->out->textarea('description', _('Description'), ($this->out->arg('description')) ? $this->out->arg('description') : $this->group->description, _('Describe the group or topic in 140 chars')); $this->out->elementEnd('li'); diff --git a/theme/base/css/display.css b/theme/base/css/display.css index 253cbfa38..073d2d40a 100644 --- a/theme/base/css/display.css +++ b/theme/base/css/display.css @@ -547,6 +547,7 @@ margin-bottom:4px; width:auto; clear:none; } + .entity_profile .entity_fn { margin-left:11px; margin-right:4px; @@ -584,11 +585,8 @@ display:none; /*entity_actions*/ .entity_actions { -clear:left; -float:left; -position:absolute; -top:0; -right:0; +float:right; + } .entity_actions h2 { display:none; @@ -936,7 +934,7 @@ outline:none; } .notice-options .notice_reply a, -.notice-options form input.submit { +.notice-options input.submit { display:block; border:0; } @@ -1019,18 +1017,18 @@ border-right:0; -/*If there is hentry on #content_inner, this doesn't need to be specific to #doc */ -#doc #content_inner p { +/*If there is hentry on #content_inner, then this doesn't need to be specific to #doc or any other section */ +.hentry .entry-content p { margin-bottom:18px; } -#doc #content_inner ol, -#doc #content_inner ul { +.hentry entry-content ol, +.hentry .entry-content ul { list-style-position:inside; } -#doc #content_inner li { +.hentry .entry-content li { margin-bottom:18px; } -#doc #content_inner li li { +.hentry .entry-content li li { margin-left:18px; } diff --git a/theme/base/css/ie.css b/theme/base/css/ie.css index 9baa953b3..08b027b59 100644 --- a/theme/base/css/ie.css +++ b/theme/base/css/ie.css @@ -3,7 +3,7 @@ #aside_primary { padding-left:11px; } -.notice-options form input.submit { +.notice-options input.submit { font-size:0; margin-top:3px; height:16px; @@ -23,4 +23,8 @@ margin-left:-7px; .notice div.entry-content .timestamp a { margin-right:4px; -} \ No newline at end of file +} + +.entity_profile .entity_nickname { +padding-right:3px; +} diff --git a/theme/base/css/ie6.css b/theme/base/css/ie6.css new file mode 100644 index 000000000..4a2316903 --- /dev/null +++ b/theme/base/css/ie6.css @@ -0,0 +1,8 @@ +/* IE6 specific styles */ +.entity_profile .entity_nickname, +.entity_profile .entity_location, +.entity_profile .entity_url, +.entity_profile .entity_note, +.entity_profile .entity_tags { +margin-left:55px; +} diff --git a/theme/base/css/ie7.css b/theme/base/css/ie7.css index a6e2548ab..a6ee001e2 100644 --- a/theme/base/css/ie7.css +++ b/theme/base/css/ie7.css @@ -2,4 +2,4 @@ #form_notice textarea { width:370px; -} \ No newline at end of file +} -- cgit v1.2.3-54-g00ecf From e38f6165b6a6fe6e4fa1557a3afeceeb3a0d80e6 Mon Sep 17 00:00:00 2001 From: Robin Millette Date: Thu, 22 Jan 2009 05:08:18 +0000 Subject: uiredesign + phpdocs --- actions/allrss.php | 77 ++++++++++++++++++++++++++++++++++++++++++------------ 1 file changed, 61 insertions(+), 16 deletions(-) diff --git a/actions/allrss.php b/actions/allrss.php index 56818d605..bacb343ce 100644 --- a/actions/allrss.php +++ b/actions/allrss.php @@ -1,5 +1,17 @@ + * @author Robin Millette + * @license http://www.fsf.org/licensing/licenses/agpl.html AGPLv3 + * @link http://laconi.ca/ + * * Laconica - a distributed open-source microblogging tool * Copyright (C) 2008, Controlez-Vous, Inc. * @@ -17,20 +29,37 @@ * along with this program. If not, see . */ -if (!defined('LACONICA')) { exit(1); } - -require_once(INSTALLDIR.'/lib/rssaction.php'); +if (!defined('LACONICA')) { + exit(1); +} -// Formatting of RSS handled by Rss10Action +require_once INSTALLDIR.'/lib/rssaction.php'; +/** + * RSS feed for user and friends timeline. + * + * Formatting of RSS handled by Rss10Action + * + * @category Action + * @package Laconica + * @author Evan Prodromou + * @author Robin Millette + * @license http://www.fsf.org/licensing/licenses/agpl.html AGPLv3 + * @link http://laconi.ca/ + */ class AllrssAction extends Rss10Action { var $user = null; + /** + * Initialization. + * + * @return boolean false if user doesn't exist + */ function init() { - $nickname = $this->trimmed('nickname'); + $nickname = $this->trimmed('nickname'); $this->user = User::staticGet('nickname', $nickname); if (!$this->user) { @@ -41,11 +70,16 @@ class AllrssAction extends Rss10Action } } - function get_notices($limit=0) + /** + * Get notices + * + * @param integer $limit max number of notices to return + * + * @return array notices + */ + function getNotices($limit=0) { - - $user = $this->user; - + $user = $this->user; $notice = $user->noticesWithFriends(0, $limit); while ($notice->fetch()) { @@ -55,10 +89,15 @@ class AllrssAction extends Rss10Action return $notices; } - function get_channel() + /** + * Get channel. + * + * @return array associative array on channel information + */ + function getChannel() { $user = $this->user; - $c = array('url' => common_local_url('allrss', + $c = array('url' => common_local_url('allrss', array('nickname' => $user->nickname)), 'title' => sprintf(_('%s and friends'), $user->nickname), @@ -69,14 +108,20 @@ class AllrssAction extends Rss10Action return $c; } - function get_image() + /** + * Get image. + * + * @return string user avatar URL or null + */ + function getImage() { - $user = $this->user; + $user = $this->user; $profile = $user->getProfile(); if (!$profile) { return null; } $avatar = $profile->getAvatar(AVATAR_PROFILE_SIZE); - return ($avatar) ? $avatar->url : null; + return $avatar ? $avatar->url : null; } -} \ No newline at end of file +} + -- cgit v1.2.3-54-g00ecf From 02cbcc1b0f57ee1683d2a0d6073c8659cad89488 Mon Sep 17 00:00:00 2001 From: Robin Millette Date: Thu, 22 Jan 2009 05:11:19 +0000 Subject: uiredesign + phpdocs --- actions/publicrss.php | 2 ++ 1 file changed, 2 insertions(+) diff --git a/actions/publicrss.php b/actions/publicrss.php index b98c27205..844c334be 100644 --- a/actions/publicrss.php +++ b/actions/publicrss.php @@ -36,6 +36,8 @@ if (!defined('LACONICA')) { require_once INSTALLDIR.'/lib/rssaction.php'; /** + * RSS feed for public timeline. + * * Formatting of RSS handled by Rss10Action * * @category Action -- cgit v1.2.3-54-g00ecf From 05754da7bca4575efa28a3d47f7799a06d9a7984 Mon Sep 17 00:00:00 2001 From: Robin Millette Date: Thu, 22 Jan 2009 05:14:06 +0000 Subject: uiredesign + phpdocs --- actions/allrss.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/actions/allrss.php b/actions/allrss.php index bacb343ce..e357d12f0 100644 --- a/actions/allrss.php +++ b/actions/allrss.php @@ -1,7 +1,7 @@ Date: Thu, 22 Jan 2009 05:20:29 +0000 Subject: uiredesign + phpdocs --- actions/opensearch.php | 52 +++++++++++++++++++++++++++++++++++++------------- 1 file changed, 39 insertions(+), 13 deletions(-) diff --git a/actions/opensearch.php b/actions/opensearch.php index 6e6e794e9..d7705972f 100644 --- a/actions/opensearch.php +++ b/actions/opensearch.php @@ -1,5 +1,17 @@ + * @author Robin Millette + * @license http://www.fsf.org/licensing/licenses/agpl.html AGPLv3 + * @link http://laconi.ca/ + * * Laconica - a distributed open-source microblogging tool * Copyright (C) 2008, Controlez-Vous, Inc. * @@ -17,32 +29,46 @@ * along with this program. If not, see . */ -if (!defined('LACONICA')) { exit(1); } +if (!defined('LACONICA')) { + exit(1); +} +/** + * Opensearch action class. + * + * Formatting of RSS handled by Rss10Action + * + * @category Action + * @package Laconica + * @author Evan Prodromou + * @author Robin Millette + * @license http://www.fsf.org/licensing/licenses/agpl.html AGPLv3 + * @link http://laconi.ca/ + */ class OpensearchAction extends Action { - + /** + * Class handler. + * + * @param array $args query arguments + * + * @return boolean false if user doesn't exist + */ function handle($args) { - parent::handle($args); - - $type = $this->trimmed('type'); - + $type = $this->trimmed('type'); $short_name = ''; if ($type == 'people') { - $type = 'peoplesearch'; + $type = 'peoplesearch'; $short_name = _('People Search'); } else { + $type = 'noticesearch'; $short_name = _('Notice Search'); - $type = 'noticesearch'; } - header('Content-Type: text/html'); - common_start_xml(); $this->elementStart('OpenSearchDescription', array('xmlns' => 'http://a9.com/-/spec/opensearch/1.1/')); - $short_name = common_config('site', 'name').' '.$short_name; $this->element('ShortName', null, $short_name); $this->element('Contact', null, common_config('site', 'email')); @@ -54,8 +80,8 @@ class OpensearchAction extends Action $this->element('Language', null, common_language()); $this->element('OutputEncoding', null, 'UTF-8'); $this->element('InputEncoding', null, 'UTF-8'); - $this->elementEnd('OpenSearchDescription'); common_end_xml(); } } + -- cgit v1.2.3-54-g00ecf From 2272b4ab1de40622fd1681baadda35c34c802a89 Mon Sep 17 00:00:00 2001 From: Robin Millette Date: Thu, 22 Jan 2009 05:24:32 +0000 Subject: uiredesign + phpdocs --- actions/accesstoken.php | 38 ++++++++++++++++++++++++++++++++++---- 1 file changed, 34 insertions(+), 4 deletions(-) diff --git a/actions/accesstoken.php b/actions/accesstoken.php index ad03b7019..65c67c64e 100644 --- a/actions/accesstoken.php +++ b/actions/accesstoken.php @@ -1,5 +1,16 @@ + * @author Robin Millette + * @license http://www.fsf.org/licensing/licenses/agpl.html AGPLv3 + * @link http://laconi.ca/ + * * Laconica - a distributed open-source microblogging tool * Copyright (C) 2008, Controlez-Vous, Inc. * @@ -17,12 +28,31 @@ * along with this program. If not, see . */ -if (!defined('LACONICA')) { exit(1); } +if (!defined('LACONICA')) { + exit(1); +} -require_once(INSTALLDIR.'/lib/omb.php'); +require_once INSTALLDIR.'/lib/omb.php'; +/** + * Access token class. + * + * @category Action + * @package Laconica + * @author Evan Prodromou + * @author Robin Millette + * @license http://www.fsf.org/licensing/licenses/agpl.html AGPLv3 + * @link http://laconi.ca/ + */ class AccesstokenAction extends Action { + /** + * Class handler. + * + * @param array $args query arguments + * + * @return boolean false if user doesn't exist + */ function handle($args) { parent::handle($args); @@ -34,7 +64,7 @@ class AccesstokenAction extends Action $server = omb_oauth_server(); common_debug('fetching the access token', __FILE__); $token = $server->fetch_access_token($req); - common_debug('got this token: "'.print_r($token,true).'"', __FILE__); + common_debug('got this token: "'.print_r($token, true).'"', __FILE__); common_debug('printing the access token', __FILE__); print $token; } catch (OAuthException $e) { -- cgit v1.2.3-54-g00ecf From c474209f356085b3fac963c9ab707b1ca285b1ca Mon Sep 17 00:00:00 2001 From: Robin Millette Date: Thu, 22 Jan 2009 05:28:09 +0000 Subject: uiredesign + phpdocs --- actions/avatarbynickname.php | 35 +++++++++++++++++++++++++++++++++-- 1 file changed, 33 insertions(+), 2 deletions(-) diff --git a/actions/avatarbynickname.php b/actions/avatarbynickname.php index d2d078b61..fec202016 100644 --- a/actions/avatarbynickname.php +++ b/actions/avatarbynickname.php @@ -1,5 +1,16 @@ + * @author Robin Millette + * @license http://www.fsf.org/licensing/licenses/agpl.html AGPLv3 + * @link http://laconi.ca/ + * * Laconica - a distributed open-source microblogging tool * Copyright (C) 2008, Controlez-Vous, Inc. * @@ -17,10 +28,29 @@ * along with this program. If not, see . */ -if (!defined('LACONICA')) { exit(1); } +if (!defined('LACONICA')) { + exit(1); +} +/** + * Retrieve user avatar by nickname action class. + * + * @category Action + * @package Laconica + * @author Evan Prodromou + * @author Robin Millette + * @license http://www.fsf.org/licensing/licenses/agpl.html AGPLv3 + * @link http://laconi.ca/ + */ class AvatarbynicknameAction extends Action { + /** + * Class handler. + * + * @param array $args query arguments + * + * @return boolean false if nickname or user isn't found + */ function handle($args) { parent::handle($args); @@ -68,3 +98,4 @@ class AvatarbynicknameAction extends Action common_redirect($url, 302); } } + -- cgit v1.2.3-54-g00ecf From c20d0612bf51cff523f55b12095e7213be94355e Mon Sep 17 00:00:00 2001 From: Robin Millette Date: Thu, 22 Jan 2009 06:02:23 +0000 Subject: uiredesign + phpdocs --- actions/block.php | 94 +++++++++++++++++++++++++++++++++++-------------------- 1 file changed, 60 insertions(+), 34 deletions(-) diff --git a/actions/block.php b/actions/block.php index 738cbfbf7..64bd97a4f 100644 --- a/actions/block.php +++ b/actions/block.php @@ -1,5 +1,16 @@ + * @author Robin Millette + * @license http://www.fsf.org/licensing/licenses/agpl.html AGPLv3 + * @link http://laconi.ca/ + * * Laconica - a distributed open-source microblogging tool * Copyright (C) 2008, Controlez-Vous, Inc. * @@ -17,121 +28,135 @@ * along with this program. If not, see . */ -if (!defined('LACONICA')) { exit(1); } +if (!defined('LACONICA')) { + exit(1); +} +/** + * Block a user action class. + * + * @category Action + * @package Laconica + * @author Evan Prodromou + * @author Robin Millette + * @license http://www.fsf.org/licensing/licenses/agpl.html AGPLv3 + * @link http://laconi.ca/ + */ class BlockAction extends Action { - var $profile = null; - + /** + * Take arguments for running + * + * @param array $args $_REQUEST args + * + * @return boolean success flag + */ function prepare($args) { - parent::prepare($args); - if (!common_logged_in()) { $this->clientError(_('Not logged in.')); return false; } - $token = $this->trimmed('token'); - if (!$token || $token != common_session_token()) { $this->clientError(_('There was a problem with your session token. Try again, please.')); return; } - $id = $this->trimmed('blockto'); - if (!$id) { $this->clientError(_('No profile specified.')); return false; } - $this->profile = Profile::staticGet('id', $id); - if (!$this->profile) { $this->clientError(_('No profile with that ID.')); return false; } - return true; } + /** + * Handle request + * + * Shows a page with list of favorite notices + * + * @param array $args $_REQUEST args; handled in prepare() + * + * @return void + */ function handle($args) { parent::handle($args); if ($_SERVER['REQUEST_METHOD'] == 'POST') { if ($this->arg('block')) { - $this->are_you_sure_form(); + $this->areYouSureForm(); } else if ($this->arg('no')) { $cur = common_current_user(); - common_redirect(common_local_url('subscribers', - array('nickname' => $cur->nickname))); + common_redirect(common_local_url('subscribers', array('nickname' => $cur->nickname))); } else if ($this->arg('yes')) { - $this->block_profile(); + $this->blockProfile(); } } } - function are_you_sure_form() + /** + * Confirm with user. + * + * Shows a confirmation form. + * + * @return void + */ + function areYouSureForm() { - $id = $this->profile->id; - common_show_header(_('Block user')); - $this->element('p', null, _('Are you sure you want to block this user? '. 'Afterwards, they will be unsubscribed from you, '. 'unable to subscribe to you in the future, and '. 'you will not be notified of any @-replies from them.')); - $this->elementStart('form', array('id' => 'block-' . $id, 'method' => 'post', 'class' => 'block', 'action' => common_local_url('block'))); - $this->hidden('token', common_session_token()); - $this->element('input', array('id' => 'blockto-' . $id, 'name' => 'blockto', 'type' => 'hidden', 'value' => $id)); - foreach ($this->args as $k => $v) { if (substr($k, 0, 9) == 'returnto-') { $this->hidden($k, $v); } } - $this->submit('no', _('No')); $this->submit('yes', _('Yes')); - $this->elementEnd('form'); - common_show_footer(); } - function block_profile() + /** + * Actually block a user. + * + * @return void + */ + function blockProfile() { - $cur = common_current_user(); if ($cur->hasBlocked($this->profile)) { $this->clientError(_('You have already blocked this user.')); return; } - $result = $cur->block($this->profile); - if (!$result) { $this->serverError(_('Failed to save block information.')); return; } - # Now, gotta figure where we go back to - + // Now, gotta figure where we go back to foreach ($this->args as $k => $v) { if ($k == 'returnto-action') { $action = $v; @@ -148,3 +173,4 @@ class BlockAction extends Action } } } + -- cgit v1.2.3-54-g00ecf From a330bdac62ddbc15232bc65d65e869b224880e3f Mon Sep 17 00:00:00 2001 From: sarven Date: Thu, 22 Jan 2009 06:33:38 +0000 Subject: Moved nudge response from util.php to nudge.php Adjusted some CSS --- actions/nudge.php | 3 ++- js/util.js | 20 ++++++++++---------- lib/util.php | 5 ----- theme/base/css/display.css | 22 ++++++++++------------ theme/identica/css/display.css | 8 ++++++-- 5 files changed, 28 insertions(+), 30 deletions(-) diff --git a/actions/nudge.php b/actions/nudge.php index 456106459..ca6fd3761 100644 --- a/actions/nudge.php +++ b/actions/nudge.php @@ -42,6 +42,7 @@ require_once INSTALLDIR.'/lib/mail.php'; * @package Laconica * @author Evan Prodromou * @author Robin Millette + * @author Sarven Capadisli * @license http://www.fsf.org/licensing/licenses/agpl.html AGPLv3 * @link http://laconi.ca/ */ @@ -93,7 +94,7 @@ class NudgeAction extends Action $this->element('title', null, _('Nudge sent')); $this->elementEnd('head'); $this->elementStart('body'); - common_nudge_response(); + $this->element('p', array('id' => 'nudge_response'), _('Nudge sent!')); $this->elementEnd('body'); $this->elementEnd('html'); } else { diff --git a/js/util.js b/js/util.js index bb68c2587..579b4952a 100644 --- a/js/util.js +++ b/js/util.js @@ -108,16 +108,16 @@ $(document).ready(function(){ $("form.form_group_join").each(addAjaxHidden); $("form.form_group_leave").each(addAjaxHidden); - $("#nudge").ajaxForm ({ dataType: 'xml', - beforeSubmit: function(xml) { $("form#nudge input[type=submit]").attr("disabled", "disabled"); - $("form#nudge input[type=submit]").addClass("disabled"); - }, - success: function(xml) { $("#nudge").replaceWith(document._importNode($("#nudge_response", xml).get(0),true)); - $("#nudge input[type=submit]").removeAttr("disabled"); - $("#nudge input[type=submit]").removeClass("disabled"); - } - }); - $("#nudge").each(addAjaxHidden); + $("#form_user_nudge").ajaxForm ({ dataType: 'xml', + beforeSubmit: function(xml) { $("#form_user_nudge input[type=submit]").attr("disabled", "disabled"); + $("#form_user_nudge input[type=submit]").addClass("disabled"); + }, + success: function(xml) { $("#form_user_nudge").replaceWith(document._importNode($("#nudge_response", xml).get(0),true)); + $("#form_user_nudge input[type=submit]").removeAttr("disabled"); + $("#form_user_nudge input[type=submit]").removeClass("disabled"); + } + }); + $("#form_user_nudge").each(addAjaxHidden); var Subscribe = { dataType: 'xml', beforeSubmit: function(formData, jqForm, options) { $(".form_user_subscribe input[type=submit]").attr("disabled", "disabled"); diff --git a/lib/util.php b/lib/util.php index 4d4a3b20f..61f5d6c16 100644 --- a/lib/util.php +++ b/lib/util.php @@ -1660,11 +1660,6 @@ function common_session_token() return $_SESSION['token']; } -function common_nudge_response() -{ - common_element('p', array('id' => 'nudge_response'), _('Nudge sent!')); -} - function common_cache_key($extra) { return 'laconica:' . common_keyize(common_config('site', 'name')) . ':' . $extra; diff --git a/theme/base/css/display.css b/theme/base/css/display.css index 073d2d40a..91789f4f1 100644 --- a/theme/base/css/display.css +++ b/theme/base/css/display.css @@ -17,8 +17,8 @@ width:1004px; width:71.714em; } h1,h2,h3,h4,h5,h6 { - text-transform:uppercase; - margin-bottom:7px; +text-transform:uppercase; +margin-bottom:7px; } h1 { font-size:1.4em; @@ -34,8 +34,6 @@ h6 { font-size:0.9em; } caption { font-weight:bold; } -.opened { display: block !important;} -.closed { display: none !important;} legend { font-weight:bold; @@ -56,6 +54,7 @@ border-radius:4px; -moz-border-radius:4px; -webkit-border-radius:4px; } + input.submit { font-weight:bold; } @@ -79,9 +78,6 @@ form label { font-weight:bold; /*margin:0 0 11px 0;*/ } -form ul li input { -} - input.checkbox { position:relative; top:2px; @@ -465,7 +461,7 @@ padding:1px 2px; } #form_notice #notice_data-attach_view { -/*position:absolute;*/ +position:absolute; top:25px; right:30px; margin-left:4px; @@ -614,10 +610,10 @@ text-align:left; cursor:pointer; width:100%; } -.entity_actions a { +.entity_actions a, +#entity_nudge p { text-decoration:none; font-weight:bold; -width:100%; display:block; } @@ -626,12 +622,14 @@ display:block; .form_user_block input.submit, .form_user_unblock input.submit, #entity_send-a-message a, -.form_user_nudge input.submit { +.form_user_nudge input.submit, +#entity_nudge p { border:0; padding-left:20px; } -#entity_send-a-message a { +#entity_send-a-message a, +#entity_nudge p { padding:4px 4px 4px 23px; } diff --git a/theme/identica/css/display.css b/theme/identica/css/display.css index c702c77e6..fa395b03b 100644 --- a/theme/identica/css/display.css +++ b/theme/identica/css/display.css @@ -22,6 +22,7 @@ input, textarea, select { border-color:#aaa; } + input.submit, #form_notice.warning #notice_text-count, #nav_register a, @@ -43,7 +44,8 @@ div.notice-options input, .form_user_block input.submit, .form_user_unblock input.submit, #entity_send-a-message a, -.form_user_nudge input.submit { +.form_user_nudge input.submit, +#entity_nudge p { color:#002E6E; } @@ -135,7 +137,8 @@ background-image:url(../../base/images/icons/icon_vcard.gif); #entity_send-a-message a, .form_user_nudge input.submit, .form_user_block input.submit, -.form_user_unblock input.submit { +.form_user_unblock input.submit, +#entity_nudge p { background-position: 0 40%; background-repeat: no-repeat; background-color:transparent; @@ -152,6 +155,7 @@ background-color:#97BFD1; #entity_send-a-message a { background-image:url(../images/icons/twotone/green/quote.gif); } +#entity_nudge p, .form_user_nudge input.submit { background-image:url(../images/icons/twotone/green/mail.gif); } -- cgit v1.2.3-54-g00ecf From e272adb321fb72043ac7f9a16848ef9386e56571 Mon Sep 17 00:00:00 2001 From: Robin Millette Date: Thu, 22 Jan 2009 08:01:40 +0000 Subject: fixed a few bugs and logic problems in groups --- actions/editgroup.php | 19 ++++++++++++++++--- actions/leavegroup.php | 20 +++++++++++++------- actions/newgroup.php | 3 ++- actions/showgroup.php | 6 ++++-- lib/groupeditform.php | 1 + 5 files changed, 36 insertions(+), 13 deletions(-) diff --git a/actions/editgroup.php b/actions/editgroup.php index 82b78cc5c..98ebcb87a 100644 --- a/actions/editgroup.php +++ b/actions/editgroup.php @@ -88,7 +88,12 @@ class EditgroupAction extends Action return false; } - $this->group = User_group::staticGet('nickname', $nickname); + $groupid = $this->trimmed('groupid'); + if ($groupid) { + $this->group = User_group::staticGet('id', $groupid); + } else { + $this->group = User_group::staticGet('nickname', $nickname); + } if (!$this->group) { $this->clientError(_('No such group'), 404); @@ -97,7 +102,7 @@ class EditgroupAction extends Action $cur = common_current_user(); - if (!$cur->isAdmin($group)) { + if (!$cur->isAdmin($this->group)) { $this->clientError(_('You must be an admin to edit the group'), 403); return false; } @@ -155,6 +160,13 @@ class EditgroupAction extends Action function trySave() { + $cur = common_current_user(); + if (!$cur->isAdmin($this->group)) { + $this->clientError(_('You must be an admin to edit the group'), 403); + return; + } + + $nickname = common_canonical_nickname($this->trimmed('nickname')); $fullname = $this->trimmed('fullname'); $homepage = $this->trimmed('homepage'); @@ -222,4 +234,5 @@ class EditgroupAction extends Action $group != false && $group->id != $this->group->id); } -} \ No newline at end of file +} + diff --git a/actions/leavegroup.php b/actions/leavegroup.php index 587208b36..c7152e3c0 100644 --- a/actions/leavegroup.php +++ b/actions/leavegroup.php @@ -57,12 +57,12 @@ class LeavegroupAction extends Action parent::prepare($args); if (!common_config('inboxes','enabled')) { - $this->serverError(_('Inboxes must be enabled for groups to work')); + $this->serverError(_('Inboxes must be enabled for groups to work.')); return false; } if (!common_logged_in()) { - $this->clientError(_('You must be logged in to join a group.')); + $this->clientError(_('You must be logged in to leave a group.')); return false; } @@ -78,24 +78,30 @@ class LeavegroupAction extends Action } if (!$nickname) { - $this->clientError(_('No nickname'), 404); + $this->clientError(_('No nickname.'), 404); return false; } $this->group = User_group::staticGet('nickname', $nickname); if (!$this->group) { - $this->clientError(_('No such group'), 404); + $this->clientError(_('No such group.'), 404); return false; } $cur = common_current_user(); - if (!$cur->isMember($group)) { - $this->clientError(_('You are not a member of that group'), 403); + if (!$cur->isMember($this->group)) { + $this->clientError(_('You are not a member of that group.'), 403); return false; } + if ($cur->isAdmin($this->group)) { + $this->clientError(_('You may not leave a group while you are its administrator.'), 403); + return false; + + } + return true; } @@ -150,4 +156,4 @@ class LeavegroupAction extends Action $this->group->nickname))); } } -} \ No newline at end of file +} diff --git a/actions/newgroup.php b/actions/newgroup.php index 41c095ec0..42fd380df 100644 --- a/actions/newgroup.php +++ b/actions/newgroup.php @@ -201,4 +201,5 @@ class NewgroupAction extends Action $group = User_group::staticGet('nickname', $nickname); return (!is_null($group) && $group != false); } -} \ No newline at end of file +} + diff --git a/actions/showgroup.php b/actions/showgroup.php index 1af080c7e..0a499aff9 100644 --- a/actions/showgroup.php +++ b/actions/showgroup.php @@ -267,8 +267,10 @@ class ShowgroupAction extends Action $cur = common_current_user(); if ($cur) { if ($cur->isMember($this->group)) { - $lf = new LeaveForm($this, $this->group); - $lf->show(); + if (!$cur->isAdmin($this->group)) { + $lf = new LeaveForm($this, $this->group); + $lf->show(); + } } else { $jf = new JoinForm($this, $this->group); $jf->show(); diff --git a/lib/groupeditform.php b/lib/groupeditform.php index fe53918d1..ca674f3c8 100644 --- a/lib/groupeditform.php +++ b/lib/groupeditform.php @@ -133,6 +133,7 @@ class GroupEditForm extends Form { $this->out->elementStart('ul', 'form_data'); $this->out->elementStart('li'); + $this->out->hidden('groupid', $this->group->id); $this->out->input('nickname', _('Nickname'), ($this->out->arg('nickname')) ? $this->out->arg('nickname') : $this->group->nickname, _('1-64 lowercase letters or numbers, no punctuation or spaces')); -- cgit v1.2.3-54-g00ecf From 28981279c4d278861f3f50bff96bc8101dc943ee Mon Sep 17 00:00:00 2001 From: sarven Date: Thu, 22 Jan 2009 08:54:00 +0000 Subject: Colour for group leave (same as unsubscribe) --- theme/identica/css/display.css | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/theme/identica/css/display.css b/theme/identica/css/display.css index fa395b03b..1df14a7f1 100644 --- a/theme/identica/css/display.css +++ b/theme/identica/css/display.css @@ -143,12 +143,15 @@ background-position: 0 40%; background-repeat: no-repeat; background-color:transparent; } +.form_group_join input.submit, +.form_group_leave input.submit .form_user_subscribe input.submit, .form_user_unsubscribe input.submit { background-color:#A9BF4F; color:#fff; } -.form_user_unsubscribe input.submit { +.form_user_unsubscribe input.submit, +.form_group_leave input.submit { background-color:#97BFD1; } -- cgit v1.2.3-54-g00ecf From a1cb64679b06e7962c2ffffc1fc5f115494cc005 Mon Sep 17 00:00:00 2001 From: Robin Millette Date: Thu, 22 Jan 2009 09:39:53 +0000 Subject: uiredesign + phpdocs --- actions/disfavor.php | 61 ++++++++++++++++++++++++++--------------- actions/favor.php | 76 +++++++++++++++++++++++++++++++++++----------------- 2 files changed, 92 insertions(+), 45 deletions(-) diff --git a/actions/disfavor.php b/actions/disfavor.php index d4a189d19..09b3bf18d 100644 --- a/actions/disfavor.php +++ b/actions/disfavor.php @@ -1,5 +1,17 @@ + * @author Robin Millette + * @license http://www.fsf.org/licensing/licenses/agpl.html AGPLv3 + * @link http://laconi.ca/ + * * Laconica - a distributed open-source microblogging tool * Copyright (C) 2008, Controlez-Vous, Inc. * @@ -17,59 +29,65 @@ * along with this program. If not, see . */ -if (!defined('LACONICA')) { exit(1); } +if (!defined('LACONICA')) { + exit(1); +} require_once INSTALLDIR.'/lib/favorform.php'; +/** + * Disfavor class. + * + * @category Action + * @package Laconica + * @author Evan Prodromou + * @author Robin Millette + * @license http://www.fsf.org/licensing/licenses/agpl.html AGPLv3 + * @link http://laconi.ca/ + */ class DisfavorAction extends Action { - + /** + * Class handler. + * + * @param array $args query arguments + * + * @return void + */ function handle($args) { - parent::handle($args); - if (!common_logged_in()) { $this->clientError(_('Not logged in.')); return; } - $user = common_current_user(); - if ($_SERVER['REQUEST_METHOD'] != 'POST') { - common_redirect(common_local_url('showfavorites', array('nickname' => $user->nickname))); + common_redirect(common_local_url('showfavorites', + array('nickname' => $user->nickname))); return; } - - $id = $this->trimmed('notice'); - + $id = $this->trimmed('notice'); $notice = Notice::staticGet($id); - - $token = $this->trimmed('token-'.$notice->id); - + $token = $this->trimmed('token-'.$notice->id); if (!$token || $token != common_session_token()) { $this->clientError(_("There was a problem with your session token. Try again, please.")); return; } - - $fave = new Fave(); - $fave->user_id = $this->id; + $fave = new Fave(); + $fave->user_id = $this->id; $fave->notice_id = $notice->id; if (!$fave->find(true)) { $this->clientError(_('This notice is not a favorite!')); return; } - $result = $fave->delete(); - if (!$result) { common_log_db_error($fave, 'DELETE', __FILE__); $this->serverError(_('Could not delete favorite.')); return; } - $user->blowFavesCache(); - if ($this->boolean('ajax')) { $this->startHTML('text/xml;charset=utf-8', true); $this->elementStart('head'); @@ -86,3 +104,4 @@ class DisfavorAction extends Action } } } + diff --git a/actions/favor.php b/actions/favor.php index 92756366d..8ecde4b11 100644 --- a/actions/favor.php +++ b/actions/favor.php @@ -1,4 +1,18 @@ + * @author Robin Millette + * @license http://www.fsf.org/licensing/licenses/agpl.html AGPLv3 + * @link http://laconi.ca/ + * + /* * Laconica - a distributed open-source microblogging tool * Copyright (C) 2008, Controlez-Vous, Inc. @@ -17,57 +31,63 @@ * along with this program. If not, see . */ -if (!defined('LACONICA')) { exit(1); } +if (!defined('LACONICA')) { + exit(1); +} -require_once(INSTALLDIR.'/lib/mail.php'); +require_once INSTALLDIR.'/lib/mail.php'; require_once INSTALLDIR.'/lib/disfavorform.php'; +/** + * Favor class. + * + * @category Action + * @package Laconica + * @author Evan Prodromou + * @author Robin Millette + * @license http://www.fsf.org/licensing/licenses/agpl.html AGPLv3 + * @link http://laconi.ca/ + */ class FavorAction extends Action { - + /** + * Class handler. + * + * @param array $args query arguments + * + * @return void + */ function handle($args) { parent::handle($args); - if (!common_logged_in()) { $this->clientError(_('Not logged in.')); return; } - $user = common_current_user(); - if ($_SERVER['REQUEST_METHOD'] != 'POST') { - common_redirect(common_local_url('showfavorites', array('nickname' => $user->nickname))); + common_redirect(common_local_url('showfavorites', + array('nickname' => $user->nickname))); return; } - - $id = $this->trimmed('notice'); - + $id = $this->trimmed('notice'); $notice = Notice::staticGet($id); - - # CSRF protection - - $token = $this->trimmed('token-'.$notice->id); + $token = $this->trimmed('token-'.$notice->id); if (!$token || $token != common_session_token()) { $this->clientError(_("There was a problem with your session token. Try again, please.")); return; } - if ($user->hasFave($notice)) { $this->clientError(_('This notice is already a favorite!')); return; } - $fave = Fave::addNew($user, $notice); - if (!$fave) { $this->serverError(_('Could not create favorite.')); return; } - - $this->notify($fave, $notice, $user); + $this->notify($notice, $user); $user->blowFavesCache(); - if ($this->boolean('ajax')) { $this->startHTML('text/xml;charset=utf-8', true); $this->elementStart('head'); @@ -84,16 +104,24 @@ class FavorAction extends Action } } - function notify($fave, $notice, $user) + /** + * Notifies a user when his notice is favorited. + * + * @param class $notice favorited notice + * @param class $user user declaring a favorite + * + * @return void + */ + function notify($notice, $user) { $other = User::staticGet('id', $notice->profile_id); if ($other && $other->id != $user->id) { if ($other->email && $other->emailnotifyfav) { mail_notify_fave($other, $user, $notice); } - # XXX: notify by IM - # XXX: notify by SMS + // XXX: notify by IM + // XXX: notify by SMS } } - } + -- cgit v1.2.3-54-g00ecf From 914b097910b0562ad9d0fcb1e2841628a8fc23f9 Mon Sep 17 00:00:00 2001 From: Robin Millette Date: Thu, 22 Jan 2009 09:54:08 +0000 Subject: uiredesign + phpdocs --- actions/requesttoken.php | 48 ++++++++++++++++++++++++++++++++++++++++++------ 1 file changed, 42 insertions(+), 6 deletions(-) diff --git a/actions/requesttoken.php b/actions/requesttoken.php index 5058deedb..ca253b97a 100644 --- a/actions/requesttoken.php +++ b/actions/requesttoken.php @@ -1,5 +1,17 @@ + * @author Robin Millette + * @license http://www.fsf.org/licensing/licenses/agpl.html AGPLv3 + * @link http://laconi.ca/ + * * Laconica - a distributed open-source microblogging tool * Copyright (C) 2008, Controlez-Vous, Inc. * @@ -17,29 +29,53 @@ * along with this program. If not, see . */ -if (!defined('LACONICA')) { exit(1); } +if (!defined('LACONICA')) { + exit(1); +} -require_once(INSTALLDIR.'/lib/omb.php'); +require_once INSTALLDIR.'/lib/omb.php'; +/** + * Request token action class. + * + * @category Action + * @package Laconica + * @author Evan Prodromou + * @author Robin Millette + * @license http://www.fsf.org/licensing/licenses/agpl.html AGPLv3 + * @link http://laconi.ca/ + */ class RequesttokenAction extends Action { - + /** + * Is read only? + * + * @return boolean false + */ function isReadOnly() { return false; } + /** + * Class handler. + * + * @param array $args array of arguments + * + * @return void + */ function handle($args) { parent::handle($args); try { common_remove_magic_from_request(); - $req = OAuthRequest::from_request(); + $req = OAuthRequest::from_request(); $server = omb_oauth_server(); - $token = $server->fetch_request_token($req); + $token = $server->fetch_request_token($req); print $token; } catch (OAuthException $e) { $this->serverError($e->getMessage()); } } } + -- cgit v1.2.3-54-g00ecf From 8990aaebb4a52d38ba6b58338f19366509e0b37a Mon Sep 17 00:00:00 2001 From: Zach Copley Date: Thu, 22 Jan 2009 03:13:11 -0800 Subject: New HTTP error message classes for uiredesign --- actions/clienterror.php | 94 +++++++++++++++++++++++++++++++++++++++++++++++++ actions/servererror.php | 92 +++++++++++++++++++++++++++++++++++++++++++++++ lib/htmloutputter.php | 12 +++++++ 3 files changed, 198 insertions(+) create mode 100644 actions/clienterror.php create mode 100644 actions/servererror.php diff --git a/actions/clienterror.php b/actions/clienterror.php new file mode 100644 index 000000000..ef6fd51df --- /dev/null +++ b/actions/clienterror.php @@ -0,0 +1,94 @@ + + * @author Zach Copley + * @license http://www.fsf.org/licensing/licenses/agpl.html AGPLv3 + * @link http://laconi.ca/ + * + * Laconica - a distributed open-source microblogging tool + * Copyright (C) 2008, Controlez-Vous, Inc. + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with this program. If not, see . + */ + +if (!defined('LACONICA')) { + exit(1); +} + +require_once INSTALLDIR.'/lib/error.php'; + +/** + * Class for displaying HTTP client errors + * + * @category Action + * @package Laconica + * @author Zach Copley + * @license http://www.fsf.org/licensing/licenses/agpl.html AGPLv3 + * @link http://laconi.ca/ + */ +class ClientErrorAction extends ErrorAction +{ + function __construct($message='Error', $code=400) + { + parent::__construct($message, $code); + + $this->status = array(400 => 'Bad Request', + 401 => 'Unauthorized', + 402 => 'Payment Required', + 403 => 'Forbidden', + 404 => 'Not Found', + 405 => 'Method Not Allowed', + 406 => 'Not Acceptable', + 407 => 'Proxy Authentication Required', + 408 => 'Request Timeout', + 409 => 'Conflict', + 410 => 'Gone', + 411 => 'Length Required', + 412 => 'Precondition Failed', + 413 => 'Request Entity Too Large', + 414 => 'Request-URI Too Long', + 415 => 'Unsupported Media Type', + 416 => 'Requested Range Not Satisfiable', + 417 => 'Expectation Failed'); + $this->default = 400; + } + + // XXX: Should these error actions even be invokable via URI? + + function handle($args) + { + parent::handle($args); + + $this->code = $this->trimmed('code'); + + if (!$this->code || $code < 400 || $code > 499) { + $this->code = $this->default; + } + + $this->message = $this->trimmed('message'); + + if (!$this->message) { + $this->message = "Client Error $this->code"; + } + + $this->showPage(); + } +} diff --git a/actions/servererror.php b/actions/servererror.php new file mode 100644 index 000000000..a39886591 --- /dev/null +++ b/actions/servererror.php @@ -0,0 +1,92 @@ + + * @author Zach Copley + * @license http://www.fsf.org/licensing/licenses/agpl.html AGPLv3 + * @link http://laconi.ca/ + * + * Laconica - a distributed open-source microblogging tool + * Copyright (C) 2008, Controlez-Vous, Inc. + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with this program. If not, see . + */ + +if (!defined('LACONICA')) { + exit(1); +} + +require_once INSTALLDIR.'/lib/error.php'; + +/** + * Class for displaying HTTP server errors + * + * Note: The older util.php class simply printed a string, but the spec + * says that 500 errors should be treated similarly to 400 errors, and + * it's easier to give an HTML response. Maybe we can customize these + * to display some funny animal cartoons. If not, we can probably role + * these classes up into a single class. + * + * See: http://tools.ietf.org/html/rfc2616#section-10 + * + * @category Action + * @package Laconica + * @author Zach Copley + * @license http://www.fsf.org/licensing/licenses/agpl.html AGPLv3 + * @link http://laconi.ca/ + */ +class ServerErrorAction extends ErrorAction +{ + function __construct($message='Error', $code=500) + { + parent::__construct($message, $code); + + $this->status = array(500 => 'Internal Server Error', + 501 => 'Not Implemented', + 502 => 'Bad Gateway', + 503 => 'Service Unavailable', + 504 => 'Gateway Timeout', + 505 => 'HTTP Version Not Supported'); + + $this->default = 500; + } + + // XXX: Should these error actions even be invokable via URI? + + function handle($args) + { + parent::handle($args); + + $this->code = $this->trimmed('code'); + + if (!$this->code || $code < 500 || $code > 599) { + $this->code = $this->default; + } + + $this->message = $this->trimmed('message'); + + if (!$this->message) { + $this->message = "Server Error $this->code"; + } + + $this->showPage(); + } + +} diff --git a/lib/htmloutputter.php b/lib/htmloutputter.php index 1e164933c..f9245414f 100644 --- a/lib/htmloutputter.php +++ b/lib/htmloutputter.php @@ -108,6 +108,8 @@ class HTMLOutputter extends XMLOutputter } header('Content-Type: '.$type); + + $this->extraHeaders(); $this->startXML('html', '-//W3C//DTD XHTML 1.0 Strict//EN', @@ -132,6 +134,16 @@ class HTMLOutputter extends XMLOutputter $this->elementEnd('html'); $this->endXML(); } + + /** + * To specify additional HTTP headers for the action + * + * @return void + */ + function extraHeaders() + { + // Needs to be overloaded + } /** * Output an HTML text input element -- cgit v1.2.3-54-g00ecf From f89f6a8eb0d16fc7c4114ba9279466189b857ea6 Mon Sep 17 00:00:00 2001 From: Zach Copley Date: Thu, 22 Jan 2009 03:33:12 -0800 Subject: Base class for new uiredesign HTTP error classes --- lib/error.php | 136 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 136 insertions(+) create mode 100644 lib/error.php diff --git a/lib/error.php b/lib/error.php new file mode 100644 index 000000000..9842053d8 --- /dev/null +++ b/lib/error.php @@ -0,0 +1,136 @@ + + * @author Zach Copley + * @license http://www.fsf.org/licensing/licenses/agpl.html AGPLv3 + * @link http://laconi.ca/ + * + * Laconica - a distributed open-source microblogging tool + * Copyright (C) 2008, Controlez-Vous, Inc. + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with this program. If not, see . + */ + +if (!defined('LACONICA')) { + exit(1); +} + +/** + * Base class for displaying HTTP errors + * + * @category Action + * @package Laconica + * @author Zach Copley + * @license http://www.fsf.org/licensing/licenses/agpl.html AGPLv3 + * @link http://laconi.ca/ + */ +class ErrorAction extends Action +{ + var $code = null; + var $message = null; + var $status = null; + var $default = null; + + function __construct($message, $code, $output='php://output', $indent=true) + { + parent::__construct($output, $indent); + + $this->code = $code; + $this->message = $message; + + // XXX: hack alert: usually we aren't going to + // call this page directly, but because it's + // an action it needs an args array anyway + $this->prepare($_REQUEST); + } + + /** + * To specify additional HTTP headers for the action + * + * @return void + */ + function extraHeaders() + { + $status_string = $this->status[$this->code]; + header('HTTP/1.1 '.$this->code.' '.$status_string); + } + + /** + * Display content. + * + * @return nothing + */ + function showContent() + { + $this->element('div', array('class' => 'error'), $this->message); + } + + /** + * Page title. + * + * @return page title + */ + function title() + { + return $this->message; + } + + function isReadOnly() + { + return true; + } + + function showPage() + { + parent::showPage(); + + // We don't want to have any more output after this + exit(); + } + + // Overload a bunch of stuff so the page isn't too bloated + + function showBody() + { + $this->elementStart('body', array('id' => 'error')); + $this->elementStart('div', 'wrap'); + $this->showHeader(); + $this->showCore(); + $this->showFooter(); + $this->elementEnd('div'); + $this->elementEnd('body'); + } + + function showCore() + { + $this->elementStart('div', array('id' => 'core')); + $this->showContentBlock(); + $this->elementEnd('div'); + } + + function showHeader() + { + $this->elementStart('div', array('id' => 'header')); + $this->showLogo(); + $this->elementEnd('div'); + } + +} -- cgit v1.2.3-54-g00ecf