From 3e3fec39ffd2d8e82c493809967ac22723e2365c Mon Sep 17 00:00:00 2001 From: CiaranG Date: Thu, 16 Apr 2009 17:21:06 +0100 Subject: [PATCH 01/24] Clarification in README regarding welcome/default users, as it has tripped a couple of people up --- README | 3 +++ 1 file changed, 3 insertions(+) diff --git a/README b/README index 09d9d301c5..7b2dcacc50 100644 --- a/README +++ b/README @@ -1129,6 +1129,9 @@ welcome: nickname of a user account that sends welcome messages to new busy servers it may be a good idea to keep that one just for 'urgent' messages. Default is null; no message. +If either of these special user accounts are specified, the users should +be created before the configuration is updated. + Troubleshooting =============== From 362cac0a96a48a0568454b6d60306ae10e2175e6 Mon Sep 17 00:00:00 2001 From: Robin Millette Date: Thu, 16 Apr 2009 17:34:19 +0000 Subject: [PATCH 02/24] Add a few events (hooks): RegistrationTry, RegistrationForData, ProfileFormData and ProfileSaveForm. --- actions/profilesettings.php | 369 ++++++++++++++++++------------------ actions/register.php | 336 ++++++++++++++++---------------- 2 files changed, 357 insertions(+), 348 deletions(-) diff --git a/actions/profilesettings.php b/actions/profilesettings.php index 60f7c0796e..fb847680b9 100644 --- a/actions/profilesettings.php +++ b/actions/profilesettings.php @@ -91,67 +91,68 @@ class ProfilesettingsAction extends AccountSettingsAction $this->element('legend', null, _('Profile information')); $this->hidden('token', common_session_token()); - # too much common patterns here... abstractable? - + // too much common patterns here... abstractable? $this->elementStart('ul', 'form_data'); - $this->elementStart('li'); - $this->input('nickname', _('Nickname'), - ($this->arg('nickname')) ? $this->arg('nickname') : $profile->nickname, - _('1-64 lowercase letters or numbers, no punctuation or spaces')); - $this->elementEnd('li'); - $this->elementStart('li'); - $this->input('fullname', _('Full name'), - ($this->arg('fullname')) ? $this->arg('fullname') : $profile->fullname); - $this->elementEnd('li'); - $this->elementStart('li'); - $this->input('homepage', _('Homepage'), - ($this->arg('homepage')) ? $this->arg('homepage') : $profile->homepage, - _('URL of your homepage, blog, or profile on another site')); - $this->elementEnd('li'); - $this->elementStart('li'); - $this->textarea('bio', _('Bio'), - ($this->arg('bio')) ? $this->arg('bio') : $profile->bio, - _('Describe yourself and your interests in 140 chars')); - $this->elementEnd('li'); - $this->elementStart('li'); - $this->input('location', _('Location'), - ($this->arg('location')) ? $this->arg('location') : $profile->location, - _('Where you are, like "City, State (or Region), Country"')); - $this->elementEnd('li'); - $this->elementStart('li'); - $this->input('tags', _('Tags'), - ($this->arg('tags')) ? $this->arg('tags') : implode(' ', $user->getSelfTags()), - _('Tags for yourself (letters, numbers, -, ., and _), comma- or space- separated')); - $this->elementEnd('li'); - $this->elementStart('li'); - $language = common_language(); - $this->dropdown('language', _('Language'), - get_nice_language_list(), _('Preferred language'), - true, $language); - $this->elementEnd('li'); - $timezone = common_timezone(); - $timezones = array(); - foreach(DateTimeZone::listIdentifiers() as $k => $v) { - $timezones[$v] = $v; + if (Event::handle('StartProfileFormData', array($this))) { + $this->elementStart('li'); + $this->input('nickname', _('Nickname'), + ($this->arg('nickname')) ? $this->arg('nickname') : $profile->nickname, + _('1-64 lowercase letters or numbers, no punctuation or spaces')); + $this->elementEnd('li'); + $this->elementStart('li'); + $this->input('fullname', _('Full name'), + ($this->arg('fullname')) ? $this->arg('fullname') : $profile->fullname); + $this->elementEnd('li'); + $this->elementStart('li'); + $this->input('homepage', _('Homepage'), + ($this->arg('homepage')) ? $this->arg('homepage') : $profile->homepage, + _('URL of your homepage, blog, or profile on another site')); + $this->elementEnd('li'); + $this->elementStart('li'); + $this->textarea('bio', _('Bio'), + ($this->arg('bio')) ? $this->arg('bio') : $profile->bio, + _('Describe yourself and your interests in 140 chars')); + $this->elementEnd('li'); + $this->elementStart('li'); + $this->input('location', _('Location'), + ($this->arg('location')) ? $this->arg('location') : $profile->location, + _('Where you are, like "City, State (or Region), Country"')); + $this->elementEnd('li'); + Event::handle('EndProfileFormData', array($this)); + $this->elementStart('li'); + $this->input('tags', _('Tags'), + ($this->arg('tags')) ? $this->arg('tags') : implode(' ', $user->getSelfTags()), + _('Tags for yourself (letters, numbers, -, ., and _), comma- or space- separated')); + $this->elementEnd('li'); + $this->elementStart('li'); + $language = common_language(); + $this->dropdown('language', _('Language'), + get_nice_language_list(), _('Preferred language'), + false, $language); + $this->elementEnd('li'); + $timezone = common_timezone(); + $timezones = array(); + foreach(DateTimeZone::listIdentifiers() as $k => $v) { + $timezones[$v] = $v; + } + $this->elementStart('li'); + $this->dropdown('timezone', _('Timezone'), + $timezones, _('What timezone are you normally in?'), + true, $timezone); + $this->elementEnd('li'); + $this->elementStart('li'); + $this->checkbox('autosubscribe', + _('Automatically subscribe to whoever '. + 'subscribes to me (best for non-humans)'), + ($this->arg('autosubscribe')) ? + $this->boolean('autosubscribe') : $user->autosubscribe); + $this->elementEnd('li'); } - $this->elementStart('li'); - $this->dropdown('timezone', _('Timezone'), - $timezones, _('What timezone are you normally in?'), - true, $timezone); - $this->elementEnd('li'); - $this->elementStart('li'); - $this->checkbox('autosubscribe', - _('Automatically subscribe to whoever '. - 'subscribes to me (best for non-humans)'), - ($this->arg('autosubscribe')) ? - $this->boolean('autosubscribe') : $user->autosubscribe); - $this->elementEnd('li'); $this->elementEnd('ul'); $this->submit('save', _('Save')); $this->elementEnd('fieldset'); $this->elementEnd('form'); - } /** @@ -165,158 +166,158 @@ class ProfilesettingsAction extends AccountSettingsAction function handlePost() { - # CSRF protection - + // CSRF protection $token = $this->trimmed('token'); if (!$token || $token != common_session_token()) { $this->showForm(_('There was a problem with your session token. '. - 'Try again, please.')); + 'Try again, please.')); return; } - $nickname = $this->trimmed('nickname'); - $fullname = $this->trimmed('fullname'); - $homepage = $this->trimmed('homepage'); - $bio = $this->trimmed('bio'); - $location = $this->trimmed('location'); - $autosubscribe = $this->boolean('autosubscribe'); - $language = $this->trimmed('language'); - $timezone = $this->trimmed('timezone'); - $tagstring = $this->trimmed('tags'); + if (Event::handle('StartProfileSaveForm', array($this))) { - # Some validation + $nickname = $this->trimmed('nickname'); + $fullname = $this->trimmed('fullname'); + $homepage = $this->trimmed('homepage'); + $bio = $this->trimmed('bio'); + $location = $this->trimmed('location'); + $autosubscribe = $this->boolean('autosubscribe'); + $language = $this->trimmed('language'); + $timezone = $this->trimmed('timezone'); + $tagstring = $this->trimmed('tags'); - if (!Validate::string($nickname, array('min_length' => 1, - 'max_length' => 64, - 'format' => VALIDATE_NUM . VALIDATE_ALPHA_LOWER))) { - $this->showForm(_('Nickname must have only lowercase letters and numbers and no spaces.')); - return; - } else if (!User::allowed_nickname($nickname)) { - $this->showForm(_('Not a valid nickname.')); - return; - } else if (!is_null($homepage) && (strlen($homepage) > 0) && - !Validate::uri($homepage, array('allowed_schemes' => array('http', 'https')))) { - $this->showForm(_('Homepage is not a valid URL.')); - return; - } else if (!is_null($fullname) && mb_strlen($fullname) > 255) { - $this->showForm(_('Full name is too long (max 255 chars).')); - return; - } else if (!is_null($bio) && mb_strlen($bio) > 140) { - $this->showForm(_('Bio is too long (max 140 chars).')); - return; - } else if (!is_null($location) && mb_strlen($location) > 255) { - $this->showForm(_('Location is too long (max 255 chars).')); - return; - } else if (is_null($timezone) || !in_array($timezone, DateTimeZone::listIdentifiers())) { - $this->showForm(_('Timezone not selected.')); - return; - } else if ($this->nicknameExists($nickname)) { - $this->showForm(_('Nickname already in use. Try another one.')); - return; - } else if (!is_null($language) && strlen($language) > 50) { - $this->showForm(_('Language is too long (max 50 chars).')); - return; - } - - if ($tagstring) { - $tags = array_map('common_canonical_tag', preg_split('/[\s,]+/', $tagstring)); - } else { - $tags = array(); - } - - foreach ($tags as $tag) { - if (!common_valid_profile_tag($tag)) { - $this->showForm(sprintf(_('Invalid tag: "%s"'), $tag)); + // Some validation + if (!Validate::string($nickname, array('min_length' => 1, + 'max_length' => 64, + 'format' => VALIDATE_NUM . VALIDATE_ALPHA_LOWER))) { + $this->showForm(_('Nickname must have only lowercase letters and numbers and no spaces.')); + return; + } else if (!User::allowed_nickname($nickname)) { + $this->showForm(_('Not a valid nickname.')); + return; + } else if (!is_null($homepage) && (strlen($homepage) > 0) && + !Validate::uri($homepage, array('allowed_schemes' => array('http', 'https')))) { + $this->showForm(_('Homepage is not a valid URL.')); + return; + } else if (!is_null($fullname) && mb_strlen($fullname) > 255) { + $this->showForm(_('Full name is too long (max 255 chars).')); + return; + } else if (!is_null($bio) && mb_strlen($bio) > 140) { + $this->showForm(_('Bio is too long (max 140 chars).')); + return; + } else if (!is_null($location) && mb_strlen($location) > 255) { + $this->showForm(_('Location is too long (max 255 chars).')); + return; + } else if (is_null($timezone) || !in_array($timezone, DateTimeZone::listIdentifiers())) { + $this->showForm(_('Timezone not selected.')); + return; + } else if ($this->nicknameExists($nickname)) { + $this->showForm(_('Nickname already in use. Try another one.')); + return; + } else if (!is_null($language) && strlen($language) > 50) { + $this->showForm(_('Language is too long (max 50 chars).')); return; } - } - $user = common_current_user(); - - $user->query('BEGIN'); - - if ($user->nickname != $nickname || - $user->language != $language || - $user->timezone != $timezone) { - - common_debug('Updating user nickname from ' . $user->nickname . ' to ' . $nickname, - __FILE__); - common_debug('Updating user language from ' . $user->language . ' to ' . $language, - __FILE__); - common_debug('Updating user timezone from ' . $user->timezone . ' to ' . $timezone, - __FILE__); - - $original = clone($user); - - $user->nickname = $nickname; - $user->language = $language; - $user->timezone = $timezone; - - $result = $user->updateKeys($original); - - if ($result === false) { - common_log_db_error($user, 'UPDATE', __FILE__); - $this->serverError(_('Couldn\'t update user.')); - return; + if ($tagstring) { + $tags = array_map('common_canonical_tag', preg_split('/[\s,]+/', $tagstring)); } else { - # Re-initialize language environment if it changed - common_init_language(); + $tags = array(); } - } - # XXX: XOR + foreach ($tags as $tag) { + if (!common_valid_profile_tag($tag)) { + $this->showForm(sprintf(_('Invalid tag: "%s"'), $tag)); + return; + } + } - if ($user->autosubscribe ^ $autosubscribe) { + $user = common_current_user(); - $original = clone($user); + $user->query('BEGIN'); - $user->autosubscribe = $autosubscribe; + if ($user->nickname != $nickname || + $user->language != $language || + $user->timezone != $timezone) { - $result = $user->update($original); + common_debug('Updating user nickname from ' . $user->nickname . ' to ' . $nickname, + __FILE__); + common_debug('Updating user language from ' . $user->language . ' to ' . $language, + __FILE__); + common_debug('Updating user timezone from ' . $user->timezone . ' to ' . $timezone, + __FILE__); - if ($result === false) { - common_log_db_error($user, 'UPDATE', __FILE__); - $this->serverError(_('Couldn\'t update user for autosubscribe.')); + $original = clone($user); + + $user->nickname = $nickname; + $user->language = $language; + $user->timezone = $timezone; + + $result = $user->updateKeys($original); + + if ($result === false) { + common_log_db_error($user, 'UPDATE', __FILE__); + $this->serverError(_('Couldn\'t update user.')); + return; + } else { + // Re-initialize language environment if it changed + common_init_language(); + } + } + +// XXX: XOR + if ($user->autosubscribe ^ $autosubscribe) { + + $original = clone($user); + + $user->autosubscribe = $autosubscribe; + + $result = $user->update($original); + + if ($result === false) { + common_log_db_error($user, 'UPDATE', __FILE__); + $this->serverError(_('Couldn\'t update user for autosubscribe.')); + return; + } + } + + $profile = $user->getProfile(); + + $orig_profile = clone($profile); + + $profile->nickname = $user->nickname; + $profile->fullname = $fullname; + $profile->homepage = $homepage; + $profile->bio = $bio; + $profile->location = $location; + $profile->profileurl = common_profile_url($nickname); + + common_debug('Old profile: ' . common_log_objstring($orig_profile), __FILE__); + common_debug('New profile: ' . common_log_objstring($profile), __FILE__); + + $result = $profile->update($orig_profile); + + if (!$result) { + common_log_db_error($profile, 'UPDATE', __FILE__); + $this->serverError(_('Couldn\'t save profile.')); return; } + + // Set the user tags + $result = $user->setSelfTags($tags); + + if (!$result) { + $this->serverError(_('Couldn\'t save tags.')); + return; + } + + $user->query('COMMIT'); + Event::handle('EndProfileSaveForm', array($this)); + common_broadcast_profile($profile); + + $this->showForm(_('Settings saved.'), true); + } - - $profile = $user->getProfile(); - - $orig_profile = clone($profile); - - $profile->nickname = $user->nickname; - $profile->fullname = $fullname; - $profile->homepage = $homepage; - $profile->bio = $bio; - $profile->location = $location; - $profile->profileurl = common_profile_url($nickname); - - common_debug('Old profile: ' . common_log_objstring($orig_profile), __FILE__); - common_debug('New profile: ' . common_log_objstring($profile), __FILE__); - - $result = $profile->update($orig_profile); - - if (!$result) { - common_log_db_error($profile, 'UPDATE', __FILE__); - $this->serverError(_('Couldn\'t save profile.')); - return; - } - - # Set the user tags - - $result = $user->setSelfTags($tags); - - if (!$result) { - $this->serverError(_('Couldn\'t save tags.')); - return; - } - - $user->query('COMMIT'); - - common_broadcast_profile($profile); - - $this->showForm(_('Settings saved.'), true); } function nicknameExists($nickname) diff --git a/actions/register.php b/actions/register.php index 5d7a8ce690..ab49ad3fdc 100644 --- a/actions/register.php +++ b/actions/register.php @@ -108,107 +108,109 @@ class RegisterAction extends Action function tryRegister() { - $token = $this->trimmed('token'); - if (!$token || $token != common_session_token()) { - $this->showForm(_('There was a problem with your session token. '. - 'Try again, please.')); - return; - } + if (Event::handle('StartRegistrationTry', array($this))) { + $token = $this->trimmed('token'); + if (!$token || $token != common_session_token()) { + $this->showForm(_('There was a problem with your session token. '. + 'Try again, please.')); + return; + } - $nickname = $this->trimmed('nickname'); - $email = $this->trimmed('email'); - $fullname = $this->trimmed('fullname'); - $homepage = $this->trimmed('homepage'); - $bio = $this->trimmed('bio'); - $location = $this->trimmed('location'); + $nickname = $this->trimmed('nickname'); + $email = $this->trimmed('email'); + $fullname = $this->trimmed('fullname'); + $homepage = $this->trimmed('homepage'); + $bio = $this->trimmed('bio'); + $location = $this->trimmed('location'); - // We don't trim these... whitespace is OK in a password! + // We don't trim these... whitespace is OK in a password! + $password = $this->arg('password'); + $confirm = $this->arg('confirm'); - $password = $this->arg('password'); - $confirm = $this->arg('confirm'); + // invitation code, if any + $code = $this->trimmed('code'); - // invitation code, if any + if ($code) { + $invite = Invitation::staticGet($code); + } - $code = $this->trimmed('code'); + if (common_config('site', 'inviteonly') && !($code && $invite)) { + $this->clientError(_('Sorry, only invited people can register.')); + return; + } - if ($code) { - $invite = Invitation::staticGet($code); - } + // Input scrubbing + $nickname = common_canonical_nickname($nickname); + $email = common_canonical_email($email); - if (common_config('site', 'inviteonly') && !($code && $invite)) { - $this->clientError(_('Sorry, only invited people can register.')); - return; - } + if (!$this->boolean('license')) { + $this->showForm(_('You can\'t register if you don\'t '. + 'agree to the license.')); + } else if ($email && !Validate::email($email, true)) { + $this->showForm(_('Not a valid email address.')); + } else if (!Validate::string($nickname, array('min_length' => 1, + 'max_length' => 64, + 'format' => NICKNAME_FMT))) { + $this->showForm(_('Nickname must have only lowercase letters '. + 'and numbers and no spaces.')); + } else if ($this->nicknameExists($nickname)) { + $this->showForm(_('Nickname already in use. Try another one.')); + } else if (!User::allowed_nickname($nickname)) { + $this->showForm(_('Not a valid nickname.')); + } else if ($this->emailExists($email)) { + $this->showForm(_('Email address already exists.')); + } else if (!is_null($homepage) && (strlen($homepage) > 0) && + !Validate::uri($homepage, + array('allowed_schemes' => + array('http', 'https')))) { + $this->showForm(_('Homepage is not a valid URL.')); + return; + } else if (!is_null($fullname) && mb_strlen($fullname) > 255) { + $this->showForm(_('Full name is too long (max 255 chars).')); + return; + } else if (!is_null($bio) && mb_strlen($bio) > 140) { + $this->showForm(_('Bio is too long (max 140 chars).')); + return; + } else if (!is_null($location) && mb_strlen($location) > 255) { + $this->showForm(_('Location is too long (max 255 chars).')); + return; + } else if (strlen($password) < 6) { + $this->showForm(_('Password must be 6 or more characters.')); + return; + } else if ($password != $confirm) { + $this->showForm(_('Passwords don\'t match.')); + } else if ($user = User::register(array('nickname' => $nickname, + 'password' => $password, + 'email' => $email, + 'fullname' => $fullname, + 'homepage' => $homepage, + 'bio' => $bio, + 'location' => $location, + 'code' => $code))) { + if (!$user) { + $this->showForm(_('Invalid username or password.')); + return; + } + // success! + if (!common_set_user($user)) { + $this->serverError(_('Error setting user.')); + return; + } + // this is a real login + common_real_login(true); + if ($this->boolean('rememberme')) { + common_debug('Adding rememberme cookie for ' . $nickname); + common_rememberme($user); + } - // Input scrubbing + Event::handle('EndRegistrationTry', array($this)); - $nickname = common_canonical_nickname($nickname); - $email = common_canonical_email($email); - - if (!$this->boolean('license')) { - $this->showForm(_('You can\'t register if you don\'t '. - 'agree to the license.')); - } else if ($email && !Validate::email($email, true)) { - $this->showForm(_('Not a valid email address.')); - } else if (!Validate::string($nickname, array('min_length' => 1, - 'max_length' => 64, - 'format' => NICKNAME_FMT))) { - $this->showForm(_('Nickname must have only lowercase letters '. - 'and numbers and no spaces.')); - } else if ($this->nicknameExists($nickname)) { - $this->showForm(_('Nickname already in use. Try another one.')); - } else if (!User::allowed_nickname($nickname)) { - $this->showForm(_('Not a valid nickname.')); - } else if ($this->emailExists($email)) { - $this->showForm(_('Email address already exists.')); - } else if (!is_null($homepage) && (strlen($homepage) > 0) && - !Validate::uri($homepage, - array('allowed_schemes' => - array('http', 'https')))) { - $this->showForm(_('Homepage is not a valid URL.')); - return; - } else if (!is_null($fullname) && mb_strlen($fullname) > 255) { - $this->showForm(_('Full name is too long (max 255 chars).')); - return; - } else if (!is_null($bio) && mb_strlen($bio) > 140) { - $this->showForm(_('Bio is too long (max 140 chars).')); - return; - } else if (!is_null($location) && mb_strlen($location) > 255) { - $this->showForm(_('Location is too long (max 255 chars).')); - return; - } else if (strlen($password) < 6) { - $this->showForm(_('Password must be 6 or more characters.')); - return; - } else if ($password != $confirm) { - $this->showForm(_('Passwords don\'t match.')); - } else if ($user = User::register(array('nickname' => $nickname, - 'password' => $password, - 'email' => $email, - 'fullname' => $fullname, - 'homepage' => $homepage, - 'bio' => $bio, - 'location' => $location, - 'code' => $code))) { - if (!$user) { + // Re-init language env in case it changed (not yet, but soon) + common_init_language(); + $this->showSuccess(); + } else { $this->showForm(_('Invalid username or password.')); - return; } - // success! - if (!common_set_user($user)) { - $this->serverError(_('Error setting user.')); - return; - } - // this is a real login - common_real_login(true); - if ($this->boolean('rememberme')) { - common_debug('Adding rememberme cookie for ' . $nickname); - common_rememberme($user); - } - // Re-init language env in case it changed (not yet, but soon) - common_init_language(); - $this->showSuccess(); - } else { - $this->showForm(_('Invalid username or password.')); } } @@ -250,7 +252,9 @@ class RegisterAction extends Action // overrrided to add entry-title class function showPageTitle() { - $this->element('h1', array('class' => 'entry-title'), $this->title()); + if (Event::handle('StartShowPageTitle', array($this))) { + $this->element('h1', array('class' => 'entry-title'), $this->title()); + } } // overrided to add hentry, and content-inner class @@ -351,9 +355,9 @@ class RegisterAction extends Action } $this->elementStart('form', array('method' => 'post', - 'id' => 'form_register', - 'class' => 'form_settings', - 'action' => common_local_url('register'))); + 'id' => 'form_register', + 'class' => 'form_settings', + 'action' => common_local_url('register'))); $this->elementStart('fieldset'); $this->element('legend', null, 'Account settings'); $this->hidden('token', common_session_token()); @@ -363,77 +367,80 @@ class RegisterAction extends Action } $this->elementStart('ul', 'form_data'); - $this->elementStart('li'); - $this->input('nickname', _('Nickname'), $this->trimmed('nickname'), - _('1-64 lowercase letters or numbers, '. - 'no punctuation or spaces. Required.')); - $this->elementEnd('li'); - $this->elementStart('li'); - $this->password('password', _('Password'), - _('6 or more characters. Required.')); - $this->elementEnd('li'); - $this->elementStart('li'); - $this->password('confirm', _('Confirm'), - _('Same as password above. Required.')); - $this->elementEnd('li'); - $this->elementStart('li'); - if ($invite && $invite->address_type == 'email') { - $this->input('email', _('Email'), $invite->address, - _('Used only for updates, announcements, '. - 'and password recovery')); - } else { - $this->input('email', _('Email'), $this->trimmed('email'), - _('Used only for updates, announcements, '. - 'and password recovery')); + if (Event::handle('StartRegistrationFormData', array($this))) { + $this->elementStart('li'); + $this->input('nickname', _('Nickname'), $this->trimmed('nickname'), + _('1-64 lowercase letters or numbers, '. + 'no punctuation or spaces. Required.')); + $this->elementEnd('li'); + $this->elementStart('li'); + $this->password('password', _('Password'), + _('6 or more characters. Required.')); + $this->elementEnd('li'); + $this->elementStart('li'); + $this->password('confirm', _('Confirm'), + _('Same as password above. Required.')); + $this->elementEnd('li'); + $this->elementStart('li'); + if ($invite && $invite->address_type == 'email') { + $this->input('email', _('Email'), $invite->address, + _('Used only for updates, announcements, '. + 'and password recovery')); + } else { + $this->input('email', _('Email'), $this->trimmed('email'), + _('Used only for updates, announcements, '. + 'and password recovery')); + } + $this->elementEnd('li'); + $this->elementStart('li'); + $this->input('fullname', _('Full name'), + $this->trimmed('fullname'), + _('Longer name, preferably your "real" name')); + $this->elementEnd('li'); + $this->elementStart('li'); + $this->input('homepage', _('Homepage'), + $this->trimmed('homepage'), + _('URL of your homepage, blog, '. + 'or profile on another site')); + $this->elementEnd('li'); + $this->elementStart('li'); + $this->textarea('bio', _('Bio'), + $this->trimmed('bio'), + _('Describe yourself and your '. + 'interests in 140 chars')); + $this->elementEnd('li'); + $this->elementStart('li'); + $this->input('location', _('Location'), + $this->trimmed('location'), + _('Where you are, like "City, '. + 'State (or Region), Country"')); + $this->elementEnd('li'); + Event::handle('EndRegistrationFormData', array($this)); + $this->elementStart('li', array('id' => 'settings_rememberme')); + $this->checkbox('rememberme', _('Remember me'), + $this->boolean('rememberme'), + _('Automatically login in the future; '. + 'not for shared computers!')); + $this->elementEnd('li'); + $attrs = array('type' => 'checkbox', + 'id' => 'license', + 'class' => 'checkbox', + 'name' => 'license', + 'value' => 'true'); + if ($this->boolean('license')) { + $attrs['checked'] = 'checked'; + } + $this->elementStart('li'); + $this->element('input', $attrs); + $this->elementStart('label', array('class' => 'checkbox', 'for' => 'license')); + $this->text(_('My text and files are available under ')); + $this->element('a', array('href' => common_config('license', 'url')), + common_config('license', 'title'), _("Creative Commons Attribution 3.0")); + $this->text(_(' except this private data: password, '. + 'email address, IM address, and phone number.')); + $this->elementEnd('label'); + $this->elementEnd('li'); } - $this->elementEnd('li'); - $this->elementStart('li'); - $this->input('fullname', _('Full name'), - $this->trimmed('fullname'), - _('Longer name, preferably your "real" name')); - $this->elementEnd('li'); - $this->elementStart('li'); - $this->input('homepage', _('Homepage'), - $this->trimmed('homepage'), - _('URL of your homepage, blog, '. - 'or profile on another site')); - $this->elementEnd('li'); - $this->elementStart('li'); - $this->textarea('bio', _('Bio'), - $this->trimmed('bio'), - _('Describe yourself and your '. - 'interests in 140 chars')); - $this->elementEnd('li'); - $this->elementStart('li'); - $this->input('location', _('Location'), - $this->trimmed('location'), - _('Where you are, like "City, '. - 'State (or Region), Country"')); - $this->elementEnd('li'); - $this->elementStart('li', array('id' => 'settings_rememberme')); - $this->checkbox('rememberme', _('Remember me'), - $this->boolean('rememberme'), - _('Automatically login in the future; '. - 'not for shared computers!')); - $this->elementEnd('li'); - $attrs = array('type' => 'checkbox', - 'id' => 'license', - 'class' => 'checkbox', - 'name' => 'license', - 'value' => 'true'); - if ($this->boolean('license')) { - $attrs['checked'] = 'checked'; - } - $this->elementStart('li'); - $this->element('input', $attrs); - $this->elementStart('label', array('class' => 'checkbox', 'for' => 'license')); - $this->text(_('My text and files are available under ')); - $this->element('a', array('href' => common_config('license', 'url')), - common_config('license', 'title'), _("Creative Commons Attribution 3.0")); - $this->text(_(' except this private data: password, '. - 'email address, IM address, and phone number.')); - $this->elementEnd('label'); - $this->elementEnd('li'); $this->elementEnd('ul'); $this->submit('submit', _('Register')); $this->elementEnd('fieldset'); @@ -515,3 +522,4 @@ class RegisterAction extends Action $nav->show(); } } + From ed0556971661de1b8748882f48c316afac20b8be Mon Sep 17 00:00:00 2001 From: Robin Millette Date: Thu, 16 Apr 2009 17:58:52 +0000 Subject: [PATCH 03/24] Add an even (hook): StartPersonalGroupNav. --- lib/personalgroupnav.php | 68 +++++++++++++++++++++------------------- 1 file changed, 35 insertions(+), 33 deletions(-) diff --git a/lib/personalgroupnav.php b/lib/personalgroupnav.php index 63e6138df2..acc0336673 100644 --- a/lib/personalgroupnav.php +++ b/lib/personalgroupnav.php @@ -93,43 +93,45 @@ class PersonalGroupNav extends Widget $this->out->elementStart('ul', array('class' => 'nav')); - $this->out->menuItem(common_local_url('all', array('nickname' => - $nickname)), - _('Personal'), - sprintf(_('%s and friends'), (($user_profile && $user_profile->fullname) ? $user_profile->fullname : $nickname)), - $action == 'all', 'nav_timeline_personal'); - $this->out->menuItem(common_local_url('replies', array('nickname' => - $nickname)), - _('Replies'), - sprintf(_('Replies to %s'), (($user_profile && $user_profile->fullname) ? $user_profile->fullname : $nickname)), - $action == 'replies', 'nav_timeline_replies'); - $this->out->menuItem(common_local_url('showstream', array('nickname' => - $nickname)), - _('Profile'), - ($user_profile && $user_profile->fullname) ? $user_profile->fullname : $nickname, - $action == 'showstream', 'nav_profile'); - $this->out->menuItem(common_local_url('showfavorites', array('nickname' => - $nickname)), - _('Favorites'), - sprintf(_('%s\'s favorite notices'), ($user_profile) ? $user_profile->getBestName() : _('User')), - $action == 'showfavorites', 'nav_timeline_favorites'); + if (Event::handle('StartPersonalGroupNav', array($this))) { + $this->out->menuItem(common_local_url('all', array('nickname' => + $nickname)), + _('Personal'), + sprintf(_('%s and friends'), (($user_profile && $user_profile->fullname) ? $user_profile->fullname : $nickname)), + $action == 'all', 'nav_timeline_personal'); + $this->out->menuItem(common_local_url('replies', array('nickname' => + $nickname)), + _('Replies'), + sprintf(_('Replies to %s'), (($user_profile && $user_profile->fullname) ? $user_profile->fullname : $nickname)), + $action == 'replies', 'nav_timeline_replies'); + $this->out->menuItem(common_local_url('showstream', array('nickname' => + $nickname)), + _('Profile'), + ($user_profile && $user_profile->fullname) ? $user_profile->fullname : $nickname, + $action == 'showstream', 'nav_profile'); + $this->out->menuItem(common_local_url('showfavorites', array('nickname' => + $nickname)), + _('Favorites'), + sprintf(_('%s\'s favorite notices'), ($user_profile) ? $user_profile->getBestName() : _('User')), + $action == 'showfavorites', 'nav_timeline_favorites'); - $cur = common_current_user(); + $cur = common_current_user(); - if ($cur && $cur->id == $user->id) { + if ($cur && $cur->id == $user->id) { - $this->out->menuItem(common_local_url('inbox', array('nickname' => - $nickname)), - _('Inbox'), - _('Your incoming messages'), - $action == 'inbox'); - $this->out->menuItem(common_local_url('outbox', array('nickname' => - $nickname)), - _('Outbox'), - _('Your sent messages'), - $action == 'outbox'); + $this->out->menuItem(common_local_url('inbox', array('nickname' => + $nickname)), + _('Inbox'), + _('Your incoming messages'), + $action == 'inbox'); + $this->out->menuItem(common_local_url('outbox', array('nickname' => + $nickname)), + _('Outbox'), + _('Your sent messages'), + $action == 'outbox'); + } + Event::handle('EndPersonalGroupNav', array($this)); } - $this->out->elementEnd('ul'); } } From bac3ee95c96db10ed51a907f6f9b602a7c887c0f Mon Sep 17 00:00:00 2001 From: CiaranG Date: Thu, 16 Apr 2009 21:07:59 +0100 Subject: [PATCH 04/24] Abort the xmpp-related daemons immediately if xmpp is disabled in the config, otherwise they chew up *lots* of CPU doing nothing --- scripts/jabberqueuehandler.php | 9 ++++++++- scripts/publicqueuehandler.php | 7 +++++++ scripts/xmppconfirmhandler.php | 7 +++++++ scripts/xmppdaemon.php | 7 +++++++ 4 files changed, 29 insertions(+), 1 deletion(-) diff --git a/scripts/jabberqueuehandler.php b/scripts/jabberqueuehandler.php index 924fc45453..8b6e974c0a 100755 --- a/scripts/jabberqueuehandler.php +++ b/scripts/jabberqueuehandler.php @@ -54,6 +54,13 @@ class JabberQueueHandler extends XmppQueueHandler } } +// Abort immediately if xmpp is not enabled, otherwise the daemon chews up +// lots of CPU trying to connect to unconfigured servers +if (common_config('xmpp','enabled')==false) { + print "Aborting daemon - xmpp is disabled\n"; + exit(); +} + ini_set("max_execution_time", "0"); ini_set("max_input_time", "0"); set_time_limit(0); @@ -63,4 +70,4 @@ $resource = ($argc > 1) ? $argv[1] : (common_config('xmpp','resource') . '-queue $handler = new JabberQueueHandler($resource); -$handler->runOnce(); \ No newline at end of file +$handler->runOnce(); diff --git a/scripts/publicqueuehandler.php b/scripts/publicqueuehandler.php index 5075c12df5..b0fa22d438 100755 --- a/scripts/publicqueuehandler.php +++ b/scripts/publicqueuehandler.php @@ -52,6 +52,13 @@ class PublicQueueHandler extends XmppQueueHandler } } +// Abort immediately if xmpp is not enabled, otherwise the daemon chews up +// lots of CPU trying to connect to unconfigured servers +if (common_config('xmpp','enabled')==false) { + print "Aborting daemon - xmpp is disabled\n"; + exit(); +} + ini_set("max_execution_time", "0"); ini_set("max_input_time", "0"); set_time_limit(0); diff --git a/scripts/xmppconfirmhandler.php b/scripts/xmppconfirmhandler.php index 2b8b085ce8..7f39235fed 100755 --- a/scripts/xmppconfirmhandler.php +++ b/scripts/xmppconfirmhandler.php @@ -140,6 +140,13 @@ class XmppConfirmHandler extends XmppQueueHandler } } +// Abort immediately if xmpp is not enabled, otherwise the daemon chews up +// lots of CPU trying to connect to unconfigured servers +if (common_config('xmpp','enabled')==false) { + print "Aborting daemon - xmpp is disabled\n"; + exit(); +} + ini_set("max_execution_time", "0"); ini_set("max_input_time", "0"); set_time_limit(0); diff --git a/scripts/xmppdaemon.php b/scripts/xmppdaemon.php index ef3f8c63d8..0ce2f2a280 100755 --- a/scripts/xmppdaemon.php +++ b/scripts/xmppdaemon.php @@ -321,6 +321,13 @@ class XMPPDaemon extends Daemon } } +// Abort immediately if xmpp is not enabled, otherwise the daemon chews up +// lots of CPU trying to connect to unconfigured servers +if (common_config('xmpp','enabled')==false) { + print "Aborting daemon - xmpp is disabled\n"; + exit(); +} + ini_set("max_execution_time", "0"); ini_set("max_input_time", "0"); set_time_limit(0); From 4d0e4f733bdfa281487f370b70f5f7440a7ef931 Mon Sep 17 00:00:00 2001 From: Zach Copley Date: Thu, 16 Apr 2009 14:40:57 -0700 Subject: [PATCH 05/24] Make API dates more compatible with Twitter - ticket 1432 --- lib/twitterapi.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/twitterapi.php b/lib/twitterapi.php index b8357c6889..6a90b4e288 100644 --- a/lib/twitterapi.php +++ b/lib/twitterapi.php @@ -418,7 +418,7 @@ class TwitterapiAction extends Action function date_twitter($dt) { $t = strtotime($dt); - return date("D M d G:i:s O Y", $t); + return date("D M d H:i:s O Y", $t); } // XXX: Candidate for a general utility method somewhere? From c3a44d2ab982c42aaece2785316416a8ea780873 Mon Sep 17 00:00:00 2001 From: Sarven Capadisli Date: Thu, 16 Apr 2009 21:57:42 +0000 Subject: [PATCH 06/24] form_notice textarea is cleared on successful direct message post. Disabled notice posting with XHR on Inbox and Outbox pages. This will be revisited in 0.8.x. --- js/util.js | 28 ++++++++++++++++++---------- 1 file changed, 18 insertions(+), 10 deletions(-) diff --git a/js/util.js b/js/util.js index 81139744ff..38d2a9a424 100644 --- a/js/util.js +++ b/js/util.js @@ -166,28 +166,36 @@ $(document).ready(function(){ $("#notice_action-submit").addClass("disabled"); return true; }, - success: function(xml) { if ($("#error", xml).length > 0 || $("#command_result", xml).length > 0) { + success: function(xml) { if ($("#error", xml).length > 0) { var result = document._importNode($("p", xml).get(0), true); result = result.textContent || result.innerHTML; alert(result); } else { - $("#notices_primary .notices").prepend(document._importNode($("li", xml).get(0), true)); + if ($("#command_result", xml).length > 0) { + var result = document._importNode($("p", xml).get(0), true); + result = result.textContent || result.innerHTML; + alert(result); + } + else { + $("#notices_primary .notices").prepend(document._importNode($("li", xml).get(0), true)); + counter(); + $("#notices_primary .notice:first").css({display:"none"}); + $("#notices_primary .notice:first").fadeIn(2500); + NoticeHover(); + NoticeReply(); + } $("#notice_data-text").val(""); - counter(); - $("#notices_primary .notice:first").css({display:"none"}); - $("#notices_primary .notice:first").fadeIn(2500); - NoticeHover(); - NoticeReply(); } $("#form_notice").removeClass("processing"); $("#notice_action-submit").removeAttr("disabled"); $("#notice_action-submit").removeClass("disabled"); } }; - $("#form_notice").ajaxForm(PostNotice); - $("#form_notice").each(addAjaxHidden); - + if (document.body.id != 'inbox' && document.body.id != 'outbox') { + $("#form_notice").ajaxForm(PostNotice); + $("#form_notice").each(addAjaxHidden); + } NoticeHover(); NoticeReply(); }); From 34d904b180e5caa17eb945292a8a64656424d5d0 Mon Sep 17 00:00:00 2001 From: Sarven Capadisli Date: Fri, 17 Apr 2009 01:11:38 +0000 Subject: [PATCH 07/24] Ticket 1404. Showing the link to the members list page. --- actions/grouprss.php | 2 +- actions/showgroup.php | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/actions/grouprss.php b/actions/grouprss.php index a9a2eef877..0b7280a11c 100644 --- a/actions/grouprss.php +++ b/actions/grouprss.php @@ -34,7 +34,7 @@ if (!defined('LACONICA')) { require_once INSTALLDIR.'/lib/rssaction.php'; -define('MEMBERS_PER_SECTION', 81); +define('MEMBERS_PER_SECTION', 27); /** * Group RSS feed diff --git a/actions/showgroup.php b/actions/showgroup.php index 025f8383a2..a7df397273 100644 --- a/actions/showgroup.php +++ b/actions/showgroup.php @@ -35,7 +35,7 @@ if (!defined('LACONICA')) { require_once INSTALLDIR.'/lib/noticelist.php'; require_once INSTALLDIR.'/lib/feedlist.php'; -define('MEMBERS_PER_SECTION', 81); +define('MEMBERS_PER_SECTION', 27); /** * Group main page @@ -361,7 +361,7 @@ class ShowgroupAction extends Action $this->element('p', null, _('(None)')); } - if ($cnt == MEMBERS_PER_SECTION) { + if ($cnt > MEMBERS_PER_SECTION) { $this->element('a', array('href' => common_local_url('groupmembers', array('nickname' => $this->group->nickname))), _('All members')); From 21873b806d6c5cf3e55ea10e49959c944f708688 Mon Sep 17 00:00:00 2001 From: Robin Millette Date: Fri, 17 Apr 2009 16:46:49 +0000 Subject: [PATCH 08/24] cosmetic fixes. --- lib/searchaction.php | 2 +- lib/tagcloudsection.php | 124 ---------------------------------------- lib/util.php | 3 +- 3 files changed, 3 insertions(+), 126 deletions(-) delete mode 100644 lib/tagcloudsection.php diff --git a/lib/searchaction.php b/lib/searchaction.php index e74450e11f..e7ad4affda 100644 --- a/lib/searchaction.php +++ b/lib/searchaction.php @@ -51,7 +51,7 @@ class SearchAction extends Action * * @return boolean true */ - function isReadOnly($args) + function isReadOnly() { return true; } diff --git a/lib/tagcloudsection.php b/lib/tagcloudsection.php deleted file mode 100644 index ff2aca6d6e..0000000000 --- a/lib/tagcloudsection.php +++ /dev/null @@ -1,124 +0,0 @@ -. - * - * @category Widget - * @package Laconica - * @author Evan Prodromou - * @copyright 2009 Control Yourself, Inc. - * @license http://www.fsf.org/licensing/licenses/agpl-3.0.html GNU Affero General Public License version 3.0 - * @link http://laconi.ca/ - */ - -if (!defined('LACONICA')) { - exit(1); -} - -define('TAGS_PER_SECTION', 20); - -/** - * Base class for sections - * - * These are the widgets that show interesting data about a person - * group, or site. - * - * @category Widget - * @package Laconica - * @author Evan Prodromou - * @license http://www.fsf.org/licensing/licenses/agpl-3.0.html GNU Affero General Public License version 3.0 - * @link http://laconi.ca/ - */ - -class TagCloudSection extends Section -{ - function showContent() - { - $tags = $this->getTags(); - - if (!$tags) { - $this->out->element('p', null, _('None')); - return false; - } - - $cnt = 0; - - $tw = array(); - $sum = 0; - - while ($tags->fetch() && ++$cnt <= TAGS_PER_SECTION) { - $tw[$tags->tag] = $tags->weight; - $sum += $tags->weight; - } - - if ($cnt == 0) { - $this->out->element('p', null, _('(None)')); - return false; - } - - ksort($tw); - - $this->out->elementStart('ul', 'tags xoxo tag-cloud'); - foreach ($tw as $tag => $weight) { - $this->showTag($tag, $weight, ($sum == 0) ? 0 : $weight/$sum); - } - $this->out->elementEnd('ul'); - - return ($cnt > TAGS_PER_SECTION); - } - - function getTags() - { - return null; - } - - function showTag($tag, $weight, $relative) - { - if ($relative > 0.1) { - $rel = 'tag-cloud-7'; - } else if ($relative > 0.05) { - $rel = 'tag-cloud-6'; - } else if ($relative > 0.02) { - $rel = 'tag-cloud-5'; - } else if ($relative > 0.01) { - $rel = 'tag-cloud-4'; - } else if ($relative > 0.005) { - $rel = 'tag-cloud-3'; - } else if ($relative > 0.002) { - $rel = 'tag-cloud-2'; - } else { - $rel = 'tag-cloud-1'; - } - - $this->out->elementStart('li', $rel); - $this->out->element('a', array('href' => $this->tagUrl($tag)), - $tag); - $this->out->elementEnd('li'); - } - - function tagUrl($tag) - { - return common_local_url('tag', array('tag' => $tag)); - } - - function divId() - { - return 'tagcloud'; - } -} diff --git a/lib/util.php b/lib/util.php index 675ff51f01..5d16e39b56 100644 --- a/lib/util.php +++ b/lib/util.php @@ -1333,4 +1333,5 @@ function common_database_tablename($tablename) } //table prefixes could be added here later return $tablename; -} \ No newline at end of file +} + From c024ee935a638d2daf3d54374564a1956916857b Mon Sep 17 00:00:00 2001 From: Robin Millette Date: Fri, 17 Apr 2009 17:23:12 +0000 Subject: [PATCH 09/24] file was removed by mistake. --- lib/tagcloudsection.php | 142 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 142 insertions(+) create mode 100644 lib/tagcloudsection.php diff --git a/lib/tagcloudsection.php b/lib/tagcloudsection.php new file mode 100644 index 0000000000..f5c305c65f --- /dev/null +++ b/lib/tagcloudsection.php @@ -0,0 +1,142 @@ +. + * + * @category Widget + * @package Laconica + * @author Evan Prodromou + * @copyright 2009 Control Yourself, Inc. + * @license http://www.fsf.org/licensing/licenses/agpl-3.0.html GNU Affero General Public License version 3.0 + * @link http://laconi.ca/ + */ + +if (!defined('LACONICA')) { + exit(1); +} + +define('TAGS_PER_SECTION', 20); + +/** + * Base class for sections + * + * These are the widgets that show interesting data about a person + * group, or site. + * + * @category Widget + * @package Laconica + * @author Evan Prodromou + * @license http://www.fsf.org/licensing/licenses/agpl-3.0.html GNU Affero General Public License version 3.0 + * @link http://laconi.ca/ + */ + +class TagCloudSection extends Section +{ + function showContent() + { + $tags = $this->getAllTags(); + + if (!$tags) { + $this->out->element('p', null, _('None')); + return false; + } + + $cnt = count($tags); + + if ($cnt == 0) { + $this->out->element('p', null, _('(None)')); + return false; + } + + ksort($tags); + + $this->out->elementStart('ul', 'tags xoxo tag-cloud'); + foreach ($tags as $tag => $weight) { + $this->showTag($tag, $weight, ($sum == 0) ? 0 : $weight/$sum); + } + $this->out->elementEnd('ul'); + + return ($cnt > TAGS_PER_SECTION); + } + + function getTags($lst, $usr) + { + $profile_tag = new Profile_tag; + $profile_tag->selectAdd(); + $profile_tag->selectAdd('tag'); + $profile_tag->selectAdd('count(tag) as weight'); + $profile_tag->groupBy('tag'); + $profile_tag->orderBy('weight DESC'); + $cnt = $profile_tag->find(); + + $profile_tag->query(" +SELECT tag, count(tag) as weight from profile_tag, (SELECT subscriber, subscribed from subscription where subscriber=$usr and subscribed != subscriber) as t where tagger=subscriber and tagged=subscribed group by tag order by weight dest"); + + $tags = array(); + while ($profile_tag->fetch()) { +// var_dump($profile_tag); + $tags[$profile_tag->tag] = $profile_tag->weight; + } + $profile_tag->free(); + if (0) { + echo 'tags:
';
+            var_dump($tags);
+            echo '
'; + } + return $tags; + } + + function getAllTags() { + return null; + } + + function showTag($tag, $weight, $relative) + { + if ($relative > 0.1) { + $rel = 'tag-cloud-7'; + } else if ($relative > 0.05) { + $rel = 'tag-cloud-6'; + } else if ($relative > 0.02) { + $rel = 'tag-cloud-5'; + } else if ($relative > 0.01) { + $rel = 'tag-cloud-4'; + } else if ($relative > 0.005) { + $rel = 'tag-cloud-3'; + } else if ($relative > 0.002) { + $rel = 'tag-cloud-2'; + } else { + $rel = 'tag-cloud-1'; + } + + $this->out->elementStart('li', $rel); + $this->out->element('a', array('href' => $this->tagUrl($tag)), + $tag); + $this->out->elementEnd('li'); + } + + function tagUrl($tag) + { + return common_local_url('tag', array('tag' => $tag)); + } + + function divId() + { + return 'tagcloud'; + } +} From 2e06d5a2cb0d05d944bd0f969dbf5a0b10a1d48e Mon Sep 17 00:00:00 2001 From: Robin Millette Date: Fri, 17 Apr 2009 17:24:41 +0000 Subject: [PATCH 10/24] file was removed by mistake. --- lib/tagcloudsection.php | 142 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 142 insertions(+) create mode 100644 lib/tagcloudsection.php diff --git a/lib/tagcloudsection.php b/lib/tagcloudsection.php new file mode 100644 index 0000000000..f5c305c65f --- /dev/null +++ b/lib/tagcloudsection.php @@ -0,0 +1,142 @@ +. + * + * @category Widget + * @package Laconica + * @author Evan Prodromou + * @copyright 2009 Control Yourself, Inc. + * @license http://www.fsf.org/licensing/licenses/agpl-3.0.html GNU Affero General Public License version 3.0 + * @link http://laconi.ca/ + */ + +if (!defined('LACONICA')) { + exit(1); +} + +define('TAGS_PER_SECTION', 20); + +/** + * Base class for sections + * + * These are the widgets that show interesting data about a person + * group, or site. + * + * @category Widget + * @package Laconica + * @author Evan Prodromou + * @license http://www.fsf.org/licensing/licenses/agpl-3.0.html GNU Affero General Public License version 3.0 + * @link http://laconi.ca/ + */ + +class TagCloudSection extends Section +{ + function showContent() + { + $tags = $this->getAllTags(); + + if (!$tags) { + $this->out->element('p', null, _('None')); + return false; + } + + $cnt = count($tags); + + if ($cnt == 0) { + $this->out->element('p', null, _('(None)')); + return false; + } + + ksort($tags); + + $this->out->elementStart('ul', 'tags xoxo tag-cloud'); + foreach ($tags as $tag => $weight) { + $this->showTag($tag, $weight, ($sum == 0) ? 0 : $weight/$sum); + } + $this->out->elementEnd('ul'); + + return ($cnt > TAGS_PER_SECTION); + } + + function getTags($lst, $usr) + { + $profile_tag = new Profile_tag; + $profile_tag->selectAdd(); + $profile_tag->selectAdd('tag'); + $profile_tag->selectAdd('count(tag) as weight'); + $profile_tag->groupBy('tag'); + $profile_tag->orderBy('weight DESC'); + $cnt = $profile_tag->find(); + + $profile_tag->query(" +SELECT tag, count(tag) as weight from profile_tag, (SELECT subscriber, subscribed from subscription where subscriber=$usr and subscribed != subscriber) as t where tagger=subscriber and tagged=subscribed group by tag order by weight dest"); + + $tags = array(); + while ($profile_tag->fetch()) { +// var_dump($profile_tag); + $tags[$profile_tag->tag] = $profile_tag->weight; + } + $profile_tag->free(); + if (0) { + echo 'tags:
';
+            var_dump($tags);
+            echo '
'; + } + return $tags; + } + + function getAllTags() { + return null; + } + + function showTag($tag, $weight, $relative) + { + if ($relative > 0.1) { + $rel = 'tag-cloud-7'; + } else if ($relative > 0.05) { + $rel = 'tag-cloud-6'; + } else if ($relative > 0.02) { + $rel = 'tag-cloud-5'; + } else if ($relative > 0.01) { + $rel = 'tag-cloud-4'; + } else if ($relative > 0.005) { + $rel = 'tag-cloud-3'; + } else if ($relative > 0.002) { + $rel = 'tag-cloud-2'; + } else { + $rel = 'tag-cloud-1'; + } + + $this->out->elementStart('li', $rel); + $this->out->element('a', array('href' => $this->tagUrl($tag)), + $tag); + $this->out->elementEnd('li'); + } + + function tagUrl($tag) + { + return common_local_url('tag', array('tag' => $tag)); + } + + function divId() + { + return 'tagcloud'; + } +} From 2873940265611d6556eaee7a01dd53587d7ef446 Mon Sep 17 00:00:00 2001 From: Robin Millette Date: Fri, 17 Apr 2009 17:31:22 +0000 Subject: [PATCH 11/24] Fixed file that was removed by mistake. --- lib/tagcloudsection.php | 44 ++++++++++++----------------------------- 1 file changed, 13 insertions(+), 31 deletions(-) diff --git a/lib/tagcloudsection.php b/lib/tagcloudsection.php index f5c305c65f..ff2aca6d6e 100644 --- a/lib/tagcloudsection.php +++ b/lib/tagcloudsection.php @@ -50,24 +50,32 @@ class TagCloudSection extends Section { function showContent() { - $tags = $this->getAllTags(); + $tags = $this->getTags(); if (!$tags) { $this->out->element('p', null, _('None')); return false; } - $cnt = count($tags); + $cnt = 0; + + $tw = array(); + $sum = 0; + + while ($tags->fetch() && ++$cnt <= TAGS_PER_SECTION) { + $tw[$tags->tag] = $tags->weight; + $sum += $tags->weight; + } if ($cnt == 0) { $this->out->element('p', null, _('(None)')); return false; } - ksort($tags); + ksort($tw); $this->out->elementStart('ul', 'tags xoxo tag-cloud'); - foreach ($tags as $tag => $weight) { + foreach ($tw as $tag => $weight) { $this->showTag($tag, $weight, ($sum == 0) ? 0 : $weight/$sum); } $this->out->elementEnd('ul'); @@ -75,34 +83,8 @@ class TagCloudSection extends Section return ($cnt > TAGS_PER_SECTION); } - function getTags($lst, $usr) + function getTags() { - $profile_tag = new Profile_tag; - $profile_tag->selectAdd(); - $profile_tag->selectAdd('tag'); - $profile_tag->selectAdd('count(tag) as weight'); - $profile_tag->groupBy('tag'); - $profile_tag->orderBy('weight DESC'); - $cnt = $profile_tag->find(); - - $profile_tag->query(" -SELECT tag, count(tag) as weight from profile_tag, (SELECT subscriber, subscribed from subscription where subscriber=$usr and subscribed != subscriber) as t where tagger=subscriber and tagged=subscribed group by tag order by weight dest"); - - $tags = array(); - while ($profile_tag->fetch()) { -// var_dump($profile_tag); - $tags[$profile_tag->tag] = $profile_tag->weight; - } - $profile_tag->free(); - if (0) { - echo 'tags:
';
-            var_dump($tags);
-            echo '
'; - } - return $tags; - } - - function getAllTags() { return null; } From cb645558a511e0f4a03923a988bda78ceae5ff0d Mon Sep 17 00:00:00 2001 From: Robin Millette Date: Fri, 17 Apr 2009 17:35:51 +0000 Subject: [PATCH 12/24] Fixed file that was removed by mistake. --- lib/tagcloudsection.php | 44 ++++++++++++----------------------------- 1 file changed, 13 insertions(+), 31 deletions(-) diff --git a/lib/tagcloudsection.php b/lib/tagcloudsection.php index f5c305c65f..ff2aca6d6e 100644 --- a/lib/tagcloudsection.php +++ b/lib/tagcloudsection.php @@ -50,24 +50,32 @@ class TagCloudSection extends Section { function showContent() { - $tags = $this->getAllTags(); + $tags = $this->getTags(); if (!$tags) { $this->out->element('p', null, _('None')); return false; } - $cnt = count($tags); + $cnt = 0; + + $tw = array(); + $sum = 0; + + while ($tags->fetch() && ++$cnt <= TAGS_PER_SECTION) { + $tw[$tags->tag] = $tags->weight; + $sum += $tags->weight; + } if ($cnt == 0) { $this->out->element('p', null, _('(None)')); return false; } - ksort($tags); + ksort($tw); $this->out->elementStart('ul', 'tags xoxo tag-cloud'); - foreach ($tags as $tag => $weight) { + foreach ($tw as $tag => $weight) { $this->showTag($tag, $weight, ($sum == 0) ? 0 : $weight/$sum); } $this->out->elementEnd('ul'); @@ -75,34 +83,8 @@ class TagCloudSection extends Section return ($cnt > TAGS_PER_SECTION); } - function getTags($lst, $usr) + function getTags() { - $profile_tag = new Profile_tag; - $profile_tag->selectAdd(); - $profile_tag->selectAdd('tag'); - $profile_tag->selectAdd('count(tag) as weight'); - $profile_tag->groupBy('tag'); - $profile_tag->orderBy('weight DESC'); - $cnt = $profile_tag->find(); - - $profile_tag->query(" -SELECT tag, count(tag) as weight from profile_tag, (SELECT subscriber, subscribed from subscription where subscriber=$usr and subscribed != subscriber) as t where tagger=subscriber and tagged=subscribed group by tag order by weight dest"); - - $tags = array(); - while ($profile_tag->fetch()) { -// var_dump($profile_tag); - $tags[$profile_tag->tag] = $profile_tag->weight; - } - $profile_tag->free(); - if (0) { - echo 'tags:
';
-            var_dump($tags);
-            echo '
'; - } - return $tags; - } - - function getAllTags() { return null; } From b22f446df2384c5bd3fa5cf428106ea0a62f1b7d Mon Sep 17 00:00:00 2001 From: Sarven Capadisli Date: Fri, 17 Apr 2009 19:51:20 +0000 Subject: [PATCH 13/24] Clear notice char counter for direct messages as well. --- js/util.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/js/util.js b/js/util.js index 38d2a9a424..3753bd9898 100644 --- a/js/util.js +++ b/js/util.js @@ -179,12 +179,12 @@ $(document).ready(function(){ } else { $("#notices_primary .notices").prepend(document._importNode($("li", xml).get(0), true)); - counter(); $("#notices_primary .notice:first").css({display:"none"}); $("#notices_primary .notice:first").fadeIn(2500); NoticeHover(); NoticeReply(); } + counter(); $("#notice_data-text").val(""); } $("#form_notice").removeClass("processing"); From 231c61a7eb3bb79faed696945ccd6d831c80f0f2 Mon Sep 17 00:00:00 2001 From: Evan Prodromou Date: Fri, 17 Apr 2009 12:52:26 -0700 Subject: [PATCH 14/24] store invite code in session so openidfinish can find it --- actions/finishopenidlogin.php | 33 ++++++- actions/register.php | 171 ++++++++++++++++++++-------------- 2 files changed, 127 insertions(+), 77 deletions(-) diff --git a/actions/finishopenidlogin.php b/actions/finishopenidlogin.php index 952185742f..b08b96df6c 100644 --- a/actions/finishopenidlogin.php +++ b/actions/finishopenidlogin.php @@ -191,11 +191,28 @@ class FinishopenidloginAction extends Action { # FIXME: save invite code before redirect, and check here - if (common_config('site', 'closed') || common_config('site', 'inviteonly')) { + if (common_config('site', 'closed')) { $this->clientError(_('Registration not allowed.')); return; } + $invite = null; + + if (common_config('site', 'inviteonly')) { + $code = $_SESSION['invitecode']; + if (empty($code)) { + $this->clientError(_('Registration not allowed.')); + return; + } + + $invite = Invitation::staticGet($code); + + if (empty($invite)) { + $this->clientError(_('Not a valid invitation code.')); + return; + } + } + $nickname = $this->trimmed('newname'); if (!Validate::string($nickname, array('min_length' => 1, @@ -257,10 +274,16 @@ class FinishopenidloginAction extends Action # XXX: add language # XXX: add timezone - $user = User::register(array('nickname' => $nickname, - 'email' => $email, - 'fullname' => $fullname, - 'location' => $location)); + $args = array('nickname' => $nickname, + 'email' => $email, + 'fullname' => $fullname, + 'location' => $location); + + if (!empty($invite)) { + $args['code'] = $invite->code; + } + + $user = User::register($args); $result = oid_link_user($user->id, $canonical, $display); diff --git a/actions/register.php b/actions/register.php index ab49ad3fdc..4ac7c349d7 100644 --- a/actions/register.php +++ b/actions/register.php @@ -55,6 +55,44 @@ class RegisterAction extends Action var $registered = false; + /** + * Prepare page to run + * + * + * @param $args + * @return string title + */ + + function prepare() + { + $this->code = $this->trimmed('code'); + + if (empty($this->code)) { + common_ensure_session(); + if (!empty($_SESSION['invitecode'])) { + $this->code = $_SESSION['invitecode']; + } + } + + if (common_config('site', 'inviteonly') && empty($this->code)) { + $this->clientError(_('Sorry, only invited people can register.')); + return false; + } + + if (!empty($this->code)) { + $this->invite = Invitation::staticGet($code); + if (empty($this->invite)) { + $this->clientError(_('Sorry, invalid invitation code.')); + return false; + } + // Store this in case we need it + common_ensure_session(); + $_SESSION['invitecode'] = $this->code; + } + + return true; + } + /** * Title of the page * @@ -112,7 +150,7 @@ class RegisterAction extends Action $token = $this->trimmed('token'); if (!$token || $token != common_session_token()) { $this->showForm(_('There was a problem with your session token. '. - 'Try again, please.')); + 'Try again, please.')); return; } @@ -145,14 +183,14 @@ class RegisterAction extends Action if (!$this->boolean('license')) { $this->showForm(_('You can\'t register if you don\'t '. - 'agree to the license.')); + 'agree to the license.')); } else if ($email && !Validate::email($email, true)) { $this->showForm(_('Not a valid email address.')); } else if (!Validate::string($nickname, array('min_length' => 1, - 'max_length' => 64, - 'format' => NICKNAME_FMT))) { + 'max_length' => 64, + 'format' => NICKNAME_FMT))) { $this->showForm(_('Nickname must have only lowercase letters '. - 'and numbers and no spaces.')); + 'and numbers and no spaces.')); } else if ($this->nicknameExists($nickname)) { $this->showForm(_('Nickname already in use. Try another one.')); } else if (!User::allowed_nickname($nickname)) { @@ -160,9 +198,9 @@ class RegisterAction extends Action } else if ($this->emailExists($email)) { $this->showForm(_('Email address already exists.')); } else if (!is_null($homepage) && (strlen($homepage) > 0) && - !Validate::uri($homepage, - array('allowed_schemes' => - array('http', 'https')))) { + !Validate::uri($homepage, + array('allowed_schemes' => + array('http', 'https')))) { $this->showForm(_('Homepage is not a valid URL.')); return; } else if (!is_null($fullname) && mb_strlen($fullname) > 255) { @@ -180,13 +218,13 @@ class RegisterAction extends Action } else if ($password != $confirm) { $this->showForm(_('Passwords don\'t match.')); } else if ($user = User::register(array('nickname' => $nickname, - 'password' => $password, - 'email' => $email, - 'fullname' => $fullname, - 'homepage' => $homepage, - 'bio' => $bio, - 'location' => $location, - 'code' => $code))) { + 'password' => $password, + 'email' => $email, + 'fullname' => $fullname, + 'homepage' => $homepage, + 'bio' => $bio, + 'location' => $location, + 'code' => $code))) { if (!$user) { $this->showForm(_('Invalid username or password.')); return; @@ -259,17 +297,17 @@ class RegisterAction extends Action // 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'); - } + { + $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 @@ -343,90 +381,79 @@ class RegisterAction extends Action function showFormContent() { - $code = $this->trimmed('code'); - - if ($code) { - $invite = Invitation::staticGet($code); - } - - if (common_config('site', 'inviteonly') && !($code && $invite)) { - $this->clientError(_('Sorry, only invited people can register.')); - return; - } - $this->elementStart('form', array('method' => 'post', - 'id' => 'form_register', - 'class' => 'form_settings', - 'action' => common_local_url('register'))); + 'id' => 'form_register', + 'class' => 'form_settings', + 'action' => common_local_url('register'))); $this->elementStart('fieldset'); $this->element('legend', null, 'Account settings'); $this->hidden('token', common_session_token()); - if ($code) { - $this->hidden('code', $code); + if ($this->code) { + $this->hidden('code', $this->code); } $this->elementStart('ul', 'form_data'); if (Event::handle('StartRegistrationFormData', array($this))) { $this->elementStart('li'); $this->input('nickname', _('Nickname'), $this->trimmed('nickname'), - _('1-64 lowercase letters or numbers, '. - 'no punctuation or spaces. Required.')); + _('1-64 lowercase letters or numbers, '. + 'no punctuation or spaces. Required.')); $this->elementEnd('li'); $this->elementStart('li'); $this->password('password', _('Password'), - _('6 or more characters. Required.')); + _('6 or more characters. Required.')); $this->elementEnd('li'); $this->elementStart('li'); $this->password('confirm', _('Confirm'), - _('Same as password above. Required.')); + _('Same as password above. Required.')); $this->elementEnd('li'); $this->elementStart('li'); - if ($invite && $invite->address_type == 'email') { - $this->input('email', _('Email'), $invite->address, - _('Used only for updates, announcements, '. - 'and password recovery')); + if ($this->invite && $this->invite->address_type == 'email') { + $this->input('email', _('Email'), $this->invite->address, + _('Used only for updates, announcements, '. + 'and password recovery')); } else { $this->input('email', _('Email'), $this->trimmed('email'), - _('Used only for updates, announcements, '. - 'and password recovery')); + _('Used only for updates, announcements, '. + 'and password recovery')); } $this->elementEnd('li'); $this->elementStart('li'); $this->input('fullname', _('Full name'), - $this->trimmed('fullname'), - _('Longer name, preferably your "real" name')); + $this->trimmed('fullname'), + _('Longer name, preferably your "real" name')); $this->elementEnd('li'); $this->elementStart('li'); $this->input('homepage', _('Homepage'), - $this->trimmed('homepage'), - _('URL of your homepage, blog, '. - 'or profile on another site')); + $this->trimmed('homepage'), + _('URL of your homepage, blog, '. + 'or profile on another site')); $this->elementEnd('li'); $this->elementStart('li'); $this->textarea('bio', _('Bio'), - $this->trimmed('bio'), - _('Describe yourself and your '. - 'interests in 140 chars')); + $this->trimmed('bio'), + _('Describe yourself and your '. + 'interests in 140 chars')); $this->elementEnd('li'); $this->elementStart('li'); $this->input('location', _('Location'), - $this->trimmed('location'), - _('Where you are, like "City, '. - 'State (or Region), Country"')); + $this->trimmed('location'), + _('Where you are, like "City, '. + 'State (or Region), Country"')); $this->elementEnd('li'); Event::handle('EndRegistrationFormData', array($this)); $this->elementStart('li', array('id' => 'settings_rememberme')); $this->checkbox('rememberme', _('Remember me'), - $this->boolean('rememberme'), - _('Automatically login in the future; '. - 'not for shared computers!')); + $this->boolean('rememberme'), + _('Automatically login in the future; '. + 'not for shared computers!')); $this->elementEnd('li'); $attrs = array('type' => 'checkbox', - 'id' => 'license', - 'class' => 'checkbox', - 'name' => 'license', - 'value' => 'true'); + 'id' => 'license', + 'class' => 'checkbox', + 'name' => 'license', + 'value' => 'true'); if ($this->boolean('license')) { $attrs['checked'] = 'checked'; } @@ -435,9 +462,9 @@ class RegisterAction extends Action $this->elementStart('label', array('class' => 'checkbox', 'for' => 'license')); $this->text(_('My text and files are available under ')); $this->element('a', array('href' => common_config('license', 'url')), - common_config('license', 'title'), _("Creative Commons Attribution 3.0")); + common_config('license', 'title'), _("Creative Commons Attribution 3.0")); $this->text(_(' except this private data: password, '. - 'email address, IM address, and phone number.')); + 'email address, IM address, and phone number.')); $this->elementEnd('label'); $this->elementEnd('li'); } From e8382b1292192d4c393f13ad7cd8da1be19211a8 Mon Sep 17 00:00:00 2001 From: Evan Prodromou Date: Fri, 17 Apr 2009 13:03:33 -0700 Subject: [PATCH 15/24] incorrect variable access --- actions/register.php | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/actions/register.php b/actions/register.php index 4ac7c349d7..033cf557f8 100644 --- a/actions/register.php +++ b/actions/register.php @@ -63,13 +63,14 @@ class RegisterAction extends Action * @return string title */ - function prepare() + function prepare($args) { + parent::prepare($args); $this->code = $this->trimmed('code'); if (empty($this->code)) { common_ensure_session(); - if (!empty($_SESSION['invitecode'])) { + if (array_key_exists('invitecode', $_SESSION)) { $this->code = $_SESSION['invitecode']; } } @@ -80,7 +81,7 @@ class RegisterAction extends Action } if (!empty($this->code)) { - $this->invite = Invitation::staticGet($code); + $this->invite = Invitation::staticGet('code', $this->code); if (empty($this->invite)) { $this->clientError(_('Sorry, invalid invitation code.')); return false; From 81714c6c31569e35f6b068791870bdfec25d005c Mon Sep 17 00:00:00 2001 From: Sarven Capadisli Date: Fri, 17 Apr 2009 20:14:06 +0000 Subject: [PATCH 16/24] counter() after val() reset to avoid (weird) bug. --- js/util.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/js/util.js b/js/util.js index 3753bd9898..53e6eb7923 100644 --- a/js/util.js +++ b/js/util.js @@ -184,8 +184,8 @@ $(document).ready(function(){ NoticeHover(); NoticeReply(); } - counter(); $("#notice_data-text").val(""); + counter(); } $("#form_notice").removeClass("processing"); $("#notice_action-submit").removeAttr("disabled"); From 4b54a418f3f26b44defdb42b8168ae43f4d1c66c Mon Sep 17 00:00:00 2001 From: Robin Millette Date: Sat, 18 Apr 2009 19:08:33 +0000 Subject: [PATCH 17/24] trac#1215, 1216, 1217 and 1219: subscribers/subscriptions people tagclouds --- actions/subscribers.php | 10 +++ actions/subscriptions.php | 10 +++ lib/subpeopletagcloudsection.php | 76 +++++++++++++++++++ lib/subscriberspeopleselftagcloudsection.php | 54 +++++++++++++ lib/subscriberspeopletagcloudsection.php | 60 +++++++++++++++ ...subscriptionspeopleselftagcloudsection.php | 54 +++++++++++++ lib/subscriptionspeopletagcloudsection.php | 59 ++++++++++++++ 7 files changed, 323 insertions(+) create mode 100644 lib/subpeopletagcloudsection.php create mode 100644 lib/subscriberspeopleselftagcloudsection.php create mode 100644 lib/subscriberspeopletagcloudsection.php create mode 100644 lib/subscriptionspeopleselftagcloudsection.php create mode 100644 lib/subscriptionspeopletagcloudsection.php diff --git a/actions/subscribers.php b/actions/subscribers.php index d91a7d4fd3..4482de9a7c 100644 --- a/actions/subscribers.php +++ b/actions/subscribers.php @@ -118,6 +118,16 @@ class SubscribersAction extends GalleryAction $this->raw(common_markup_to_html($message)); $this->elementEnd('div'); } + + function showSections() + { + parent::showSections(); + $cloud = new SubscribersPeopleTagCloudSection($this); + $cloud->show(); + + $cloud2 = new SubscribersPeopleSelfTagCloudSection($this); + $cloud2->show(); + } } class SubscribersList extends ProfileList diff --git a/actions/subscriptions.php b/actions/subscriptions.php index e6f3c54db8..095b18ad87 100644 --- a/actions/subscriptions.php +++ b/actions/subscriptions.php @@ -125,6 +125,16 @@ class SubscriptionsAction extends GalleryAction $this->raw(common_markup_to_html($message)); $this->elementEnd('div'); } + + function showSections() + { + parent::showSections(); + $cloud = new SubscriptionsPeopleTagCloudSection($this); + $cloud->show(); + + $cloud2 = new SubscriptionsPeopleSelfTagCloudSection($this); + $cloud2->show(); + } } class SubscriptionsList extends ProfileList diff --git a/lib/subpeopletagcloudsection.php b/lib/subpeopletagcloudsection.php new file mode 100644 index 0000000000..d98f28afa7 --- /dev/null +++ b/lib/subpeopletagcloudsection.php @@ -0,0 +1,76 @@ +. + * + * @category Widget + * @package Laconica + * @author Evan Prodromou + * @copyright 2009 Control Yourself, Inc. + * @license http://www.fsf.org/licensing/licenses/agpl-3.0.html GNU Affero General Public License version 3.0 + * @link http://laconi.ca/ + */ + +if (!defined('LACONICA')) { + exit(1); +} + +/** + * Personal tag cloud section + * + * @category Widget + * @package Laconica + * @author Evan Prodromou + * @license http://www.fsf.org/licensing/licenses/agpl-3.0.html GNU Affero General Public License version 3.0 + * @link http://laconi.ca/ + */ + +class SubPeopleTagCloudSection extends TagCloudSection +{ + function getTags() + { + $qry = $this->query(); + $limit = TAGS_PER_SECTION; + $offset = 0; + + if (common_config('db','type') == 'pgsql') { + $qry .= ' LIMIT ' . $limit . ' OFFSET ' . $offset; + } else { + $qry .= ' LIMIT ' . $offset . ', ' . $limit; + } + + $profile_tag = Memcached_DataObject::cachedQuery('Profile_tag', + sprintf($qry, + $this->out->user->id)); + return $profile_tag; + } + + function tagUrl($tag) { + return common_local_url('peopletag', array('tag' => $tag)); + } + + function showTag($tag, $weight, $relative) { + $rel = 'tag-cloud-'; + $rel .= 1+intval(7 * $relative * $weight - 0.01); + + $this->out->elementStart('li', $rel); + $this->out->element('a', array('href' => $this->tagUrl($tag)), $tag); + $this->out->elementEnd('li'); + } +} diff --git a/lib/subscriberspeopleselftagcloudsection.php b/lib/subscriberspeopleselftagcloudsection.php new file mode 100644 index 0000000000..b5a39c6de6 --- /dev/null +++ b/lib/subscriberspeopleselftagcloudsection.php @@ -0,0 +1,54 @@ +. + * + * @category Widget + * @package Laconica + * @author Evan Prodromou + * @copyright 2009 Control Yourself, Inc. + * @license http://www.fsf.org/licensing/licenses/agpl-3.0.html GNU Affero General Public License version 3.0 + * @link http://laconi.ca/ + */ + +if (!defined('LACONICA')) { + exit(1); +} + +/** + * Personal tag cloud section + * + * @category Widget + * @package Laconica + * @author Evan Prodromou + * @license http://www.fsf.org/licensing/licenses/agpl-3.0.html GNU Affero General Public License version 3.0 + * @link http://laconi.ca/ + */ + +class SubscribersPeopleSelfTagCloudSection extends SubPeopleTagCloudSection +{ + function title() + { + return _('People Tagcloud as self-tagged'); + } + + function query() { + return 'select tag, count(tag) as weight from subscription left join profile_tag on tagger = subscriber where subscribed=%d and subscribed != subscriber and tagger = tagged group by tag order by weight desc'; + } +} diff --git a/lib/subscriberspeopletagcloudsection.php b/lib/subscriberspeopletagcloudsection.php new file mode 100644 index 0000000000..23011efdd3 --- /dev/null +++ b/lib/subscriberspeopletagcloudsection.php @@ -0,0 +1,60 @@ +. + * + * @category Widget + * @package Laconica + * @author Evan Prodromou + * @copyright 2009 Control Yourself, Inc. + * @license http://www.fsf.org/licensing/licenses/agpl-3.0.html GNU Affero General Public License version 3.0 + * @link http://laconi.ca/ + */ + +if (!defined('LACONICA')) { + exit(1); +} + +/** + * Personal tag cloud section + * + * @category Widget + * @package Laconica + * @author Evan Prodromou + * @license http://www.fsf.org/licensing/licenses/agpl-3.0.html GNU Affero General Public License version 3.0 + * @link http://laconi.ca/ + */ + +class SubscribersPeopleTagCloudSection extends SubPeopleTagCloudSection +{ + function title() + { + return _('People Tagcloud as tagged'); + } + + function tagUrl($tag) { + $nickname = $this->out->profile->nickname; + return common_local_url('subscribers', array('nickname' => $nickname, 'tag' => $tag)); + } + + + function query() { + return 'select tag, count(tag) as weight from subscription left join profile_tag on subscriber=tagged and subscribed=tagger where subscribed=%d and subscriber != subscribed group by tag order by weight desc'; + } +} diff --git a/lib/subscriptionspeopleselftagcloudsection.php b/lib/subscriptionspeopleselftagcloudsection.php new file mode 100644 index 0000000000..8ac65adb05 --- /dev/null +++ b/lib/subscriptionspeopleselftagcloudsection.php @@ -0,0 +1,54 @@ +. + * + * @category Widget + * @package Laconica + * @author Evan Prodromou + * @copyright 2009 Control Yourself, Inc. + * @license http://www.fsf.org/licensing/licenses/agpl-3.0.html GNU Affero General Public License version 3.0 + * @link http://laconi.ca/ + */ + +if (!defined('LACONICA')) { + exit(1); +} + +/** + * Personal tag cloud section + * + * @category Widget + * @package Laconica + * @author Evan Prodromou + * @license http://www.fsf.org/licensing/licenses/agpl-3.0.html GNU Affero General Public License version 3.0 + * @link http://laconi.ca/ + */ + +class SubscriptionsPeopleSelfTagCloudSection extends SubPeopleTagCloudSection +{ + function title() + { + return _('People Tagcloud as self-tagged'); + } + + function query() { + return 'select tag, count(tag) as weight from subscription left join profile_tag on tagger = subscriber where subscribed=%d and subscriber != subscribed and tagger = tagged group by tag order by weight desc'; + } +} diff --git a/lib/subscriptionspeopletagcloudsection.php b/lib/subscriptionspeopletagcloudsection.php new file mode 100644 index 0000000000..c3f7d1763e --- /dev/null +++ b/lib/subscriptionspeopletagcloudsection.php @@ -0,0 +1,59 @@ +. + * + * @category Widget + * @package Laconica + * @author Evan Prodromou + * @copyright 2009 Control Yourself, Inc. + * @license http://www.fsf.org/licensing/licenses/agpl-3.0.html GNU Affero General Public License version 3.0 + * @link http://laconi.ca/ + */ + +if (!defined('LACONICA')) { + exit(1); +} + +/** + * Personal tag cloud section + * + * @category Widget + * @package Laconica + * @author Evan Prodromou + * @license http://www.fsf.org/licensing/licenses/agpl-3.0.html GNU Affero General Public License version 3.0 + * @link http://laconi.ca/ + */ + +class SubscriptionsPeopleTagCloudSection extends SubPeopleTagCloudSection +{ + function title() + { + return _('People Tagcloud as tagged'); + } + + function tagUrl($tag) { + $nickname = $this->out->profile->nickname; + return common_local_url('subscriptions', array('nickname' => $nickname, 'tag' => $tag)); + } + + function query() { + return 'select tag, count(tag) as weight from subscription left join profile_tag on subscriber=tagger and subscribed=tagged where subscriber=%d and subscriber != subscribed group by tag order by weight desc'; + } +} From e9213043a820095cceeb6cacbfacf08bba9d3142 Mon Sep 17 00:00:00 2001 From: Evan Prodromou Date: Sat, 18 Apr 2009 19:36:25 -0700 Subject: [PATCH 18/24] add reply_to index to notice --- db/laconica.sql | 1 + 1 file changed, 1 insertion(+) diff --git a/db/laconica.sql b/db/laconica.sql index a790a3fd27..5b57494d98 100644 --- a/db/laconica.sql +++ b/db/laconica.sql @@ -117,6 +117,7 @@ create table notice ( index notice_profile_id_idx (profile_id), index notice_created_idx (created), + index notice_replyto_idx (reply_to), FULLTEXT(content) ) ENGINE=MyISAM CHARACTER SET utf8 COLLATE utf8_general_ci; From 340cd553ec2e028e57f27b30e3a438c4d95584be Mon Sep 17 00:00:00 2001 From: Sarven Capadisli Date: Sun, 19 Apr 2009 23:40:37 +0000 Subject: [PATCH 19/24] otalk theme (preliminary) --- theme/otalk/css/base.css | 1201 +++++++++++++++++ theme/otalk/css/display.css | 295 ++++ theme/otalk/css/ie.css | 9 + theme/otalk/default-avatar-mini.png | Bin 0 -> 646 bytes theme/otalk/default-avatar-profile.png | Bin 0 -> 2853 bytes theme/otalk/default-avatar-stream.png | Bin 0 -> 1487 bytes .../illustrations/illu_arrow-left-01.gif | Bin 0 -> 75 bytes .../images/illustrations/illu_pattern-01.png | Bin 0 -> 3218 bytes theme/otalk/logo.png | Bin 0 -> 4988 bytes 9 files changed, 1505 insertions(+) create mode 100644 theme/otalk/css/base.css create mode 100644 theme/otalk/css/display.css create mode 100644 theme/otalk/css/ie.css create mode 100644 theme/otalk/default-avatar-mini.png create mode 100644 theme/otalk/default-avatar-profile.png create mode 100644 theme/otalk/default-avatar-stream.png create mode 100644 theme/otalk/images/illustrations/illu_arrow-left-01.gif create mode 100644 theme/otalk/images/illustrations/illu_pattern-01.png create mode 100644 theme/otalk/logo.png diff --git a/theme/otalk/css/base.css b/theme/otalk/css/base.css new file mode 100644 index 0000000000..c8737ea166 --- /dev/null +++ b/theme/otalk/css/base.css @@ -0,0 +1,1201 @@ +/** theme: italk base + * + * @package Laconica + * @author Sarven Capadisli + * @copyright 2009 Control Yourself, Inc. + * @license http://www.fsf.org/licensing/licenses/agpl-3.0.html GNU Affero General Public License version 3.0 + * @link http://laconi.ca/ + */ + +* { margin:0; padding:0; } +img { display:block; border:0; } +a abbr { cursor: pointer; border-bottom:0; } +table { border-collapse:collapse; } +ol { list-style-position:inside; } +html { font-size: 87.5%; background-color:#fff; height:100%; } +body { +background-color:#fff; +color:#000; +font-family:sans-serif; +font-size:1em; +line-height:1.65; +position:relative; +} +h1,h2,h3,h4,h5,h6 { +margin-bottom:7px; +overflow:hidden; +} +h1 { +font-size:1.4em; +margin-bottom:18px; +} +#showstream h1 { display:none; } +h2 { font-size:1.3em; } +h3 { font-size:1.2em; } +h4 { font-size:1.1em; } +h5 { font-size:1em; } +h6 { font-size:0.9em; } + +caption { +font-weight:bold; +} +legend { +font-weight:bold; +font-size:1.3em; +} +input, textarea, select, option { +padding:4px; +font-family:sans-serif; +font-size:1em; +} +input, textarea, select { +border-width:2px; +border-style: solid; +border-radius:4px; +-moz-border-radius:4px; +-webkit-border-radius:4px; +} + +input.submit { +font-weight:bold; +cursor:pointer; +} +textarea { +overflow:auto; +} +option { +padding-bottom:0; +} +fieldset { +padding:0; +border:0; +} +form ul li { +list-style-type:none; +margin:0 0 18px 0; +} +form label { +font-weight:bold; +} +input.checkbox { +position:relative; +top:2px; +left:0; +border:0; +} + +.error, +.success { +padding:4px 7px; +border-radius:4px; +-moz-border-radius:4px; +-webkit-border-radius:4px; +margin-bottom:18px; +} +form label.submit { +display:none; +} + +.form_settings { +clear:both; +} + +.form_settings fieldset { +margin-bottom:29px; +} +.form_settings input.remove { +margin-left:11px; +} +.form_settings .form_data li { +width:100%; +float:left; +} +.form_settings .form_data label { +float:left; +} +.form_settings .form_data textarea, +.form_settings .form_data select, +.form_settings .form_data input { +margin-left:11px; +float:left; +} +.form_settings .form_data input.submit { +margin-left:0; +} + +.form_settings label { +margin-top:2px; +width:152px; +} + +.form_actions label { +display:none; +} +.form_guide { +font-style:italic; +} + +.form_settings #settings_autosubscribe label { +display:inline; +font-weight:bold; +} + +#form_settings_profile legend, +#form_login legend, +#form_register legend, +#form_password legend, +#form_settings_avatar legend, +#newgroup legend, +#editgroup legend, +#form_tag_user legend, +#form_remote_subscribe legend, +#form_openid_login legend, +#form_search legend, +#form_invite legend, +#form_notice_delete legend, +#form_password_recover legend, +#form_password_change legend { +display:none; +} + +.form_settings .form_data p.form_guide { +clear:both; +margin-left:163px; +margin-bottom:0; +} + +.form_settings p { +margin-bottom:11px; +} + +.form_settings input.checkbox { +margin-top:3px; +margin-left:0; +} +.form_settings label.checkbox { +font-weight:normal; +margin-top:0; +margin-right:0; +margin-left:11px; +float:left; +width:90%; +} + + +#form_login p.form_guide, +#form_register #settings_rememberme p.form_guide, +#form_openid_login #settings_rememberme p.form_guide, +#settings_twitter_remove p.form_guide, +#form_search ul.form_data #q { +margin-left:0; +} + +.form_settings .form_note { +border-radius:4px; +-moz-border-radius:4px; +-webkit-border-radius:4px; +padding:0 7px; +} + + +.form_settings input.form_action-secondary { +margin-left:29px; +padding:0; +} + +#form_search .submit { +margin-left:11px; +} + +address { +float:left; +margin-bottom:18px; +margin-left:18px; +} +address.vcard img.logo { +margin-right:0; +} +address .fn { +font-weight:bold; +} +address img + .fn { +display:none; +} + +#header { +width:100%; +position:relative; +float:left; +padding-top:18px; +margin-bottom:29px; +} + +#site_nav_global_primary { +float:right; +margin-right:18px; +margin-bottom:11px; +margin-left:18px; +} +#site_nav_global_primary ul li { +display:inline; +margin-left:11px; +} + +.system_notice dt { +font-weight:bold; +text-transform:uppercase; +display:none; +} + +#site_notice { +position:absolute; +top:65px; +right:18px; +width:250px; +width:24%; +} +#page_notice { +clear:both; +margin-bottom:18px; +} + + +#anon_notice { +float:left; +width:43.2%; +padding:1.1%; +border-radius:7px; +-moz-border-radius:7px; +-webkit-border-radius:7px; +border-width:2px; +border-style:solid; +line-height:1.5; +font-size:1.1em; +font-weight:bold; +} + + +#footer { +float:left; +width:64%; +padding:18px; +} + +#site_nav_local_views { +float:left; +} +#site_nav_local_views dt { +display:none; +} +#site_nav_local_views li { +float:left; +margin-right:18px; +list-style-type:none; +} +#site_nav_local_views a { +float:left; +text-decoration:none; +padding:4px 11px; +-moz-border-radius-topleft:4px; +-moz-border-radius-topright:4px; +-webkit-border-top-left-radius:4px; +-webkit-border-top-right-radius:4px; +border-width:0; +border-style:solid; +border-bottom:0; +text-shadow: 2px 2px 2px #ddd; +font-weight:bold; +} +#site_nav_local_views .nav { +float:left; +width:100%; +border-bottom-width:1px; +border-bottom-style:solid; +} + +#site_nav_global_primary dt, +#site_nav_global_secondary dt { +display:none; +} + +#site_nav_global_secondary { +margin-bottom:11px; +} + +#site_nav_global_secondary ul li { +display:inline; +margin-right:11px; +} +#export_data li a { +padding-left:20px; +} +#export_data li a.foaf { +padding-left:30px; +} +#export_data li a.export_vcard { +padding-left:28px; +} + +#export_data ul { +display:inline; +} +#export_data li { +list-style-type:none; +display:inline; +margin-left:11px; +} +#export_data li:first-child { +margin-left:0; +} + +#licenses { +font-size:0.9em; +} + +#licenses dt { +font-weight:bold; +display:none; +} +#licenses dd { +margin-bottom:11px; +line-height:1.5; +} + +#site_content_license_cc { +margin-bottom:0; +} +#site_content_license_cc img { +display:inline; +vertical-align:top; +margin-right:4px; +} + +#wrap { +margin:0 auto; +width:100%; +min-width:760px; +max-width:1003px; +overflow:hidden; +} + +#core { +position:relative; +width:100%; +float:left; +margin-bottom:1em; +} + +#content { +width:100%; +min-height:259px; +padding-top:1.795%; +padding-bottom:1.795%; + +float:left; +border-radius:7px; +-moz-border-radius:7px; +-moz-border-radius-topleft:0; +-webkit-border-radius:7px; +-webkit-border-top-left-radius:0; +border-style:solid; +border-width:0; +margin-bottom:18px; +} + +#content_inner { +position:relative; +width:100%; +float:left; +} + +#aside_primary { +width:96.3%; +min-height:259px; +float:left; +clear:both; +padding:1.795%; +border-radius:7px; +-moz-border-radius:7px; +-webkit-border-radius:7px; +border-width:1px; +border-style:solid; +} + +#form_notice { +width:45.664%; +float:left; +position:relative; +line-height:1; +} +#form_notice fieldset { +border:0; +padding:0; +} +#form_notice legend { +display:none; +} +#form_notice textarea { +float:left; +border-radius:7px; +-moz-border-radius:7px; +-webkit-border-radius:7px; +width:80.789%; +height:67px; +line-height:1.5; +padding:7px 7px 16px 7px; +} +#form_notice label { +display:block; +float:left; +font-size:1.3em; +margin-bottom:7px; +} +#form_notice #notice_submit label { +display:none; +} +#form_notice .form_note { +position:absolute; +top:99px; +right:98px; +z-index:9; +} +#form_notice .form_note dt { +font-weight:bold; +display:none; +} +#notice_text-count { +font-weight:bold; +line-height:1.15; +padding:1px 2px; +} +#form_notice #notice_action-submit { +width:14%; +height:47px; +padding:0; +position:absolute; +bottom:0; +right:0; +} +#form_notice label[for=to] { +margin-top:7px; +} +#form_notice select[id=to] { +margin-bottom:7px; +margin-left:18px; +float:left; +} + + +/* entity_profile */ +.entity_profile { +position:relative; +width:521px; +min-height:123px; +float:left; +margin-bottom:18px; +margin-left:0; +overflow:hidden; +} +.entity_profile dt, +#entity_statistics dt { +font-weight:bold; +} +.entity_profile dd { +display:inline; +} + +.entity_profile .entity_depiction { +float:left; +width:96px; +margin-right:18px; +margin-bottom:18px; +} + +.entity_profile .entity_fn, +.entity_profile .entity_nickname, +.entity_profile .entity_location, +.entity_profile .entity_url, +.entity_profile .entity_note, +.entity_profile .entity_tags { +margin-left:113px; +margin-bottom:4px; +} + +.entity_profile .entity_fn, +.entity_profile .entity_nickname { +margin-left:11px; +display:inline; +font-weight:bold; +} +.entity_profile .entity_nickname { +margin-left:0; +} + +.entity_profile .entity_fn dd:before { +content: "("; +font-weight:normal; +} +.entity_profile .entity_fn dd:after { +content: ")"; +font-weight:normal; +} + +.entity_profile dt { +display:none; +} +.entity_profile h2 { +display:none; +} +/* entity_profile */ + + +/*entity_actions*/ +.entity_actions { +float:left; +margin-left:4.35%; +max-width:25%; +} +.entity_actions h2 { +display:none; +} +.entity_actions ul { +list-style-type:none; +} +.entity_actions li { +margin-bottom:4px; +} +.entity_actions li:first-child { +border-top:0; +} +.entity_actions fieldset { +border:0; +padding:0; +} +.entity_actions legend { +display:none; +} + +.entity_actions input.submit { +display:block; +text-align:left; +width:100%; +} +.entity_actions a, +.entity_nudge p, +.entity_remote_subscribe { +text-decoration:none; +font-weight:bold; +display:block; +} + +.form_user_block input.submit, +.form_user_unblock input.submit, +.entity_send-a-message a, +.entity_edit a, +.form_user_nudge input.submit, +.entity_nudge p { +border:0; +padding-left:20px; +} + +.entity_edit a, +.entity_send-a-message a, +.entity_nudge p { +padding:4px 4px 4px 23px; +} + +.entity_remote_subscribe { +padding:4px; +border-width:2px; +border-style:solid; +border-radius:4px; +-moz-border-radius:4px; +-webkit-border-radius:4px; +} +.entity_actions .accept { +margin-bottom:18px; +} + +.entity_tags ul { +list-style-type:none; +display:inline; +} +.entity_tags li { +display:inline; +margin-right:4px; +} + +.aside .section { +margin-bottom:29px; +clear:both; +float:left; +width:100%; +} +.aside .section h2 { +text-transform:uppercase; +font-size:1em; +} + +#entity_statistics dt, +#entity_statistics dd { +display:inline; +} +#entity_statistics dt:after { +content: ":"; +} + +.section ul.entities { +float:left; +width:100%; +} +.section .entities li { +list-style-type:none; +float:left; +margin-right:7px; +margin-bottom:7px; +} +.section .entities li .photo { +margin-right:0; +margin-bottom:0; +} +.section .entities li .fn { +display:none; +} + +.aside .section p, +.aside .section .more { +clear:both; +} + +.profile .entity_profile { +margin-bottom:0; +min-height:60px; +} + + +.profile .form_group_join legend, +.profile .form_group_leave legend, +.profile .form_user_subscribe legend, +.profile .form_user_unsubscribe legend { +display:none; +} + +.profiles { +list-style-type:none; +} +.profile .entity_profile .entity_location { +width:auto; +clear:none; +margin-left:11px; +} +.profile .entity_profile dl, +.profile .entity_profile dd { +display:inline; +float:none; +} +.profile .entity_profile .entity_note, +.profile .entity_profile .entity_url, +.profile .entity_profile .entity_tags, +.profile .entity_profile .form_subscription_edit { +margin-left:59px; +clear:none; +display:block; +width:auto; +} +.profile .entity_profile .entity_tags dt { +display:inline; +margin-right:11px; +} + + +.profile .entity_profile .form_subscription_edit label { +font-weight:normal; +margin-right:11px; +} + + +/* NOTICE */ +.notice, +.profile { +position:relative; +clear:both; +float:left; +width:100%; +border-width:0; +border-style:solid; +margin-bottom:29px; +} +.notices li { +list-style-type:none; +} + +#content .notice { +width:25%; +margin-left:20px; +margin-bottom:47px; +clear:none; +overflow:hidden; +padding: 0 0 0 62px; +min-height:260px; +} + +/* NOTICES */ +#notices_primary { +float:left; +width:100%; +border-radius:7px; +-moz-border-radius:7px; +-webkit-border-radius:7px; +} +#notices_primary h2 { +display:none; +} +.notice-data a span { +display:block; +padding-left:28px; +} + +.notice .author { +margin-right:11px; +} + +#content .notice .author { +/*overflow:hidden;*/ +} + +.fn { +overflow:hidden; +} + +.notice .author .fn { +font-weight:bold; +} + +.notice .author .photo { +margin-bottom:0; +} + +#content .notice .author .photo { +margin-left:-80px; +padding-right:14px; +} + + +.vcard .photo { +display:inline; +margin-right:11px; +margin-bottom:11px; +float:left; +} +.vcard .url { +text-decoration:none; +} +.vcard .url:hover { +text-decoration:underline; +} + +.notice .entry-title { +float:left; +width:100%; +overflow:hidden; +} +#content .notice .entry-title { +overflow:visible; +margin-bottom:11px; +padding:18px; +width:83%; +border-radius:7px; +-moz-border-radius:7px; +-webkit-border-radius:7px; +min-height:165px; +} + +#shownotice .notice .entry-title { +font-size:2.2em; +} + +.notice p.entry-content { +display:inline; +} + +#content .notice p.entry-content +overflow:hidden; +} + +.notice p.entry-content .vcard a { +border-radius:4px; +-moz-border-radius:4px; +-webkit-border-radius:4px; +} + +.notice div.entry-content { +clear:left; +float:left; +font-size:0.95em; +} +#showstream .notice div.entry-content { +margin-left:0; +} + +.notice .notice-options a, +.notice .notice-options input { +float:left; +font-size:1.025em; +} + +.notice div.entry-content dl, +.notice div.entry-content dt, +.notice div.entry-content dd { +display:inline; +} + +.notice div.entry-content .timestamp dt, +.notice div.entry-content .response dt { +display:none; +} +.notice div.entry-content .timestamp a { +display:inline-block; +} +.notice div.entry-content .device dt { +text-transform:lowercase; +} + + + +.notice-data { +position:absolute; +top:18px; +right:0; +min-height:50px; +margin-bottom:4px; +} +.notice .entry-content .notice-data dt { +display:none; +} + +.notice-data a { +display:block; +outline:none; +} + +.notice-options { +position:absolute; +bottom:110px; +left:29px; +font-size:0.95em; +float:right; +} + +.notice-options a { +float:left; +} +.notice-options .notice_delete, +.notice-options .notice_reply, +.notice-options .form_favor, +.notice-options .form_disfavor { +position:absolute; +left:0; +} +.notice-options .form_favor, +.notice-options .form_disfavor { +top:0; +} +.notice-options .notice_reply { +top:29px; +} +.notice-options .notice_delete { +top:58px; +} +.notice-options .notice_reply dt { +display:none; +} + +.notice-options input, +.notice-options a { +text-indent:-9999px; +outline:none; +} + +.notice-options .notice_reply a, +.notice-options input.submit { +display:block; +border:0; +} +.notice-options .notice_reply a, +.notice-options .notice_delete a { +text-decoration:none; +padding-left:16px; +} + +.notice-options form input.submit { +width:16px; +padding:2px 0; +} + +.notice-options .notice_delete dt, +.notice-options .form_favor legend, +.notice-options .form_disfavor legend { +display:none; +} +.notice-options .notice_delete fieldset, +.notice-options .form_favor fieldset, +.notice-options .form_disfavor fieldset { +border:0; +padding:0; +} + + +#usergroups #new_group { +float: left; +margin-right: 2em; +} +#new_group, #group_search { +margin-bottom:18px; +} +#new_group a { +padding-left:20px; +} + + +#filter_tags { +margin-bottom:11px; +float:left; +} +#filter_tags dt { +display:none; +} +#filter_tags ul { +list-style-type:none; +} +#filter_tags ul li { +float:left; +margin-left:7px; +padding-left:7px; +border-left-width:1px; +border-left-style:solid; +} +#filter_tags ul li.child_1 { +margin-left:0; +border-left:0; +padding-left:0; +} +#filter_tags ul li#filter_tags_all a { +font-weight:bold; +margin-top:7px; +float:left; +} + +#filter_tags ul li#filter_tags_item label { +margin-right:7px; +} +#filter_tags ul li#filter_tags_item label, +#filter_tags ul li#filter_tags_item select { +display:inline; +} +#filter_tags ul li#filter_tags_item p { +float:left; +margin-left:38px; +} +#filter_tags ul li#filter_tags_item input { +position:relative; +top:3px; +left:3px; +} + + + +.pagination { +float:left; +clear:both; +width:100%; +margin-top:18px; +} + +.pagination dt { +font-weight:bold; +display:none; +} + +.pagination .nav { +float:left; +width:100%; +list-style-type:none; +} + +.pagination .nav_prev { +float:left; +} +.pagination .nav_next { +float:right; +} + +.pagination a { +display:block; +text-decoration:none; +font-weight:bold; +padding:7px; +border-width:1px; +border-style:solid; +-moz-border-radius:7px; +-webkit-border-radius:7px; +border-radius:7px; +} + +.pagination .nav_prev a { +padding-left:30px; +} +.pagination .nav_next a { +padding-right:30px; +} +/* END: NOTICE */ + + +.hentry .entry-content p { +margin-bottom:18px; +} +.hentry entry-content ol, +.hentry .entry-content ul { +list-style-position:inside; +} +.hentry .entry-content li { +margin-bottom:18px; +} +.hentry .entry-content li li { +margin-left:18px; +} + + + + +/* TOP_POSTERS */ +.section tbody td { +padding-right:11px; +padding-bottom:11px; +} +.section .vcard .photo { +margin-right:7px; +margin-bottom:0; +} + +.section .notice { +padding-top:7px; +padding-bottom:7px; +border-top:0; +} + +.section .notice:first-child { +padding-top:0; +} + +.section .notice .author { +margin-right:0; +} +.section .notice .author .fn { +display:none; +} + + +/* tagcloud */ +.tag-cloud { +list-style-type:none; +text-align:center; +} +.aside .tag-cloud { +font-size:0.8em; +} +.tag-cloud li { +display:inline; +margin-right:7px; +line-height:1.25; +} +.aside .tag-cloud li { +line-height:1.5; +} +.tag-cloud li a { +text-decoration:none; +} +#tagcloud.section dt { +text-transform:uppercase; +font-weight:bold; +} +.tag-cloud-1 { +font-size:1em; +} +.tag-cloud-2 { +font-size:1.25em; +} +.tag-cloud-3 { +font-size:1.75em; +} +.tag-cloud-4 { +font-size:2em; +} +.tag-cloud-5 { +font-size:2.25em; +} +.tag-cloud-6 { +font-size:2.75em; +} +.tag-cloud-7 { +font-size:3.25em; +} + +#publictagcloud #tagcloud.section dt { +display:none; +} + +#form_settings_photo .form_data { +clear:both; +} + +#form_settings_avatar li { +width:auto; +} +#form_settings_avatar input { +margin-left:0; +} +#avatar_original, +#avatar_preview { +float:left; +} +#avatar_preview { +margin-left:29px; +} +#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; +} + +#form_settings_design #settings_design_color .form_data, +#form_settings_design #color-picker { +float:left; +} +#form_settings_design #settings_design_color .form_data { +width:400px; +margin-right:28px; +} + +.instructions ul { +list-style-position:inside; +} +.instructions p, +.instructions ul { +margin-bottom:18px; +} +.help dt { +display:none; +} +.guide { +clear:both; +} diff --git a/theme/otalk/css/display.css b/theme/otalk/css/display.css new file mode 100644 index 0000000000..54350fcc6a --- /dev/null +++ b/theme/otalk/css/display.css @@ -0,0 +1,295 @@ +/** theme: identica + * + * @package Laconica + * @author Sarven Capadisli + * @copyright 2009 Control Yourself, Inc. + * @license http://www.fsf.org/licensing/licenses/agpl-3.0.html GNU Affero General Public License version 3.0 + * @link http://laconi.ca/ + */ + +@import url(base.css); + +html { +} + +html, +body, +a:active { +/*background-color:#F0F2F5;*/ +} +body { +font-family: "Lucida Sans Unicode", "Lucida Grande", sans-serif; +font-size:1em; +background:#ddd url(../images/illustrations/illu_pattern-01.png) repeat 0 0; +background-color:rgba(127, 127, 127, 0.1); +} +address { +margin-right:7.18%; +} + +input, textarea, select, option { +font-family: "Lucida Sans Unicode", "Lucida Grande", sans-serif; +} +input, textarea, select, +.entity_remote_subscribe { +border-color:#aaa; +} +#filter_tags ul li { +border-color:#ddd; +} + +.form_settings input.form_action-secondary { +background:none; +} + +input.submit, +#form_notice.warning #notice_text-count, +.form_settings .form_note, +.entity_remote_subscribe { +background-color:#9BB43E; +} + +input:focus, textarea:focus, select:focus, +#form_notice.warning #notice_data-text { +border-color:#9BB43E; +} +input.submit, +.entity_remote_subscribe { +color:#fff; +} + +a, +div.notice-options input, +.form_user_block input.submit, +.form_user_unblock input.submit, +.entity_send-a-message a, +.form_user_nudge input.submit, +.entity_nudge p, +.form_settings input.form_action-secondary { +color:#8F0000; +} + +.notice, +.profile { +border-color:#CEE1E9; +} +#content .notice .entry-title, +input, textarea, select, option { +background-color:rgba(255,255,255,0.8); +} + +#content .notices li.hover .entry-title { +background-color:rgba(255,255,255,0.9); +} + +#content .notice:nth-child(1) .entry-title { +background-color:rgba(255,255,255,0.95); +font-size:2em; +} +#content .notice:nth-child(2) .entry-title { +background-color:rgba(255,255,255,0.9); +font-size:1.9em; +} +#content .notice:nth-child(3) .entry-title { +background-color:rgba(255,255,255,0.8); +font-size:1.8em; +} +#content .notice:nth-child(4) .entry-title { +background-color:rgba(255,255,255,0.7); +font-size:1.7em; +} +#content .notice:nth-child(5) .entry-title { +background-color:rgba(255,255,255,0.6); +} +#content .notice:nth-child(6) .entry-title { +background-color:rgba(255,255,255,0.5); +} +#content .notice:nth-child(7) .entry-title { +background-color:rgba(255,255,255,0.4); +} +#content .notice:nth-child(8) .entry-title { +background-color:rgba(255,255,255,0.3); +} +#content .notice:nth-child(9) .entry-title { +background-color:rgba(255,255,255,0.2); +} +#content .notice:nth-child(10) { +background-color:rgba(255,255,255,0.1); +} + + +#content .notice .author .photo { +background:url(../images/illustrations/illu_arrow-left-01.gif) no-repeat 100% 0; +} + +.section .profile { +border-top-color:#87B4C8; +} + +#aside_primary { +background-color:rgba(206, 225, 233,0.5); +} + +#notice_text-count { +color:#333; +} +#form_notice.warning #notice_text-count { +color:#000; +} +#form_notice.processing #notice_action-submit { +background:#fff url(../../base/images/icons/icon_processing.gif) no-repeat 47% 47%; +cursor:wait; +text-indent:-9999px; +} + +#content, +#site_nav_local_views .nav, +#site_nav_local_views a, +#aside_primary { +border-color:#fff; +} +#content, +#site_nav_local_views .current a { +background-color:transparent; +/*background-color:red;*/ +} + +#site_nav_local_views .current a { +background-color:transparent; +} + +#site_nav_local_views a { +background-color:rgba(127, 127, 127, 0.2); +} +#site_nav_local_views a:hover { +background-color:rgba(255, 255, 255, 0.8); +} + +.error { +background-color:#F7E8E8; +} +.success { +background-color:#EFF3DC; +} + +#anon_notice { +background-color:#87B4C8; +color:#fff; +border-color:#fff; +} + +#showstream #anon_notice { +background-color:#9BB43E; +} + +#export_data li a { +background-repeat:no-repeat; +background-position:0 45%; +} +#export_data li a.rss { +background-image:url(../../base/images/icons/icon_rss.png); +} +#export_data li a.atom { +background-image:url(../../base/images/icons/icon_atom.png); +} +#export_data li a.foaf { +background-image:url(../../base/images/icons/icon_foaf.gif); +} + +.entity_edit a, +.entity_send-a-message a, +.form_user_nudge input.submit, +.form_user_block input.submit, +.form_user_unblock input.submit, +.entity_nudge p { +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:#9BB43E; +color:#fff; +} +.form_user_unsubscribe input.submit, +.form_group_leave input.submit, +.form_user_authorization input.reject { +background-color:#87B4C8; +} + +.entity_edit a { +background-image:url(../../base/images/icons/twotone/green/edit.gif); +} +.entity_send-a-message a { +background-image:url(../../base/images/icons/twotone/green/quote.gif); +} +.entity_nudge p, +.form_user_nudge input.submit { +background-image:url(../../base/images/icons/twotone/green/mail.gif); +} +.form_user_block input.submit, +.form_user_unblock input.submit { +background-image:url(../../base/images/icons/twotone/green/shield.gif); +} + +/* NOTICES */ +.notices li.over { +background-color:#fcfcfc; +} + +.notice-options .notice_reply a, +.notice-options form input.submit { +background-color:transparent; +} +.notice-options .notice_reply a { +background:transparent url(../../base/images/icons/twotone/green/reply.gif) no-repeat 0 45%; +} +.notice-options form.form_favor input.submit { +background:transparent url(../../base/images/icons/twotone/green/favourite.gif) no-repeat 0 45%; +} +.notice-options form.form_disfavor input.submit { +background:transparent url(../../base/images/icons/twotone/green/disfavourite.gif) no-repeat 0 45%; +} +.notice-options .notice_delete a { +background:transparent url(../../base/images/icons/twotone/green/trash.gif) no-repeat 0 45%; +} + +.notices div.entry-content, +.notices div.notice-options { +opacity:0.4; +} +.notices li.hover div.entry-content, +.notices li.hover div.notice-options { +opacity:1; +} +div.entry-content { +color:#333; +} +div.notice-options a, +div.notice-options input { +font-family:sans-serif; +} +.notices li.hover { +/*background-color:#fcfcfc;*/ +} +/*END: NOTICES */ + +#new_group a { +background:transparent url(../../base/images/icons/twotone/green/news.gif) no-repeat 0 45%; +} + +.pagination .nav_prev a, +.pagination .nav_next a { +background-repeat:no-repeat; +border-color:#CEE1E9; +} +.pagination .nav_prev a { +background-image:url(../../base/images/icons/twotone/green/arrow-left.gif); +background-position:10% 45%; +} +.pagination .nav_next a { +background-image:url(../../base/images/icons/twotone/green/arrow-right.gif); +background-position:90% 45%; +} diff --git a/theme/otalk/css/ie.css b/theme/otalk/css/ie.css new file mode 100644 index 0000000000..2f463bb44d --- /dev/null +++ b/theme/otalk/css/ie.css @@ -0,0 +1,9 @@ +/* IE specific styles */ + +.notice-options input.submit { +color:#fff; +} + +#site_nav_local_views a { +background-color:#D0DFE7; +} diff --git a/theme/otalk/default-avatar-mini.png b/theme/otalk/default-avatar-mini.png new file mode 100644 index 0000000000000000000000000000000000000000..38b8692b4a2f71c8de3d6a12b715df33aada5f7c GIT binary patch literal 646 zcmV;10(t$3P)t7_1ao1dG5H5=fedf?I_U zERrsbGN6ogMr}` z=geF#+zTQC5di=LaBdjJM@3P-0idfKA;f20*DnA(@I8qLjEKM(3u~J8S_pAFm&<9f zSPbEC7@TwLgOn1}=@gFRpkA-LjIlSH&E_!?ePIBYs;Zr6Ga4*xpF`v&- zEEdi`SF2Su6bfC-+-EQtpin4yM0AgV_}m^LaEH4M-{d zNe9pK002AF4@7iH=bR&(&2Ehsiv@`2laNxrAB{#2)9Ew=0L!vqS=K>6*rng^e_gNF z@3`x_^;WAT4=u}|=ytns97hAt;6zjd&?=Y9n`49wheK2$*>gXpP+!1HdC8#9K|%7P#8l;_13R g5kkBIaJK9D9f4f}@hqK`?*IS*07*qoM6N<$f=KKaB>(^b literal 0 HcmV?d00001 diff --git a/theme/otalk/default-avatar-profile.png b/theme/otalk/default-avatar-profile.png new file mode 100644 index 0000000000000000000000000000000000000000..f8357d4fc296271b837b3d9911cfbc133918ef2f GIT binary patch literal 2853 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 MfY_K+7Z|aDy3W6;R?}) zJJa7D+8b}%q`4{D>!4paaL(^{&bi<3xi|OxZhl9J2i|dE0WSwJ z;8&o3y8I|2|D^3LB6AAh1ik=tKx{650`H~bDI%!ZcR(rC1bhe718ACt%jLrDcH?%t zsjjXjCnqQSb+v$ri3#rCzt6pU_lQIyjE#+%-9G>yipXCx_?iVMr9J?@266xz8X9P8 zYooHV@|6(Ign@wpIy*awMx%!5Z{TeaxosGd0+dqgn0n^&moHz={{8#ev17+#bDo2E zJkFUjXSj6flJR)|25b=#9i{~+rE-CvflW@QlM^RS;BvWaq&*i`u3X{NsZ&PtOA+}5 zK$|uk1vUZf+qdtvBM;Eh(!%D=n~mm2N~yO1G^JDl@G*eb>t*N8oim5o3i!0z3_V#k~=FJ5Y5fL6fe8}a?ml+uuu{^G}w$|L-;$Zs6JIj$0x~_BN z$PvQfu<=TxwzihNd-u}N&|sOw;NTz~9UY91j{}gClY`Ia!|(S~US2-$*ouk@%F4=k z^5hA?CJiVBC@U+=c;T+DE(Qk&F>ij6NQ91#4&w2+CGxtibMoZLBzb^DBEi+GR|y0H zmgXoeElpOn`8t~M;K2hfUc8vn7mvree*L9I7=(9lp?pRVhKLLsY^fGh+wHa6mLq>rRmtXN@bp62G}dHpL_uCz)C z$U;C-QBm59mz0#SXU`r>^K9F;jl8_Pls=!&$NKf_tx^KA5CGu!`|*0cGi(lrgF}Z7 zQCwVXX^w(|0uCQOJm-#8R#tN0z=3S&OkF>l&Z}3iroFwLTeoh}-`~%M4I8MhueZE^ z7}&mjJ6pGIB^V5%>pEVqmztWI1w{c1`aJY_Ja{~wg$zw1H#hgC#9diELa!s11lWxw z0d`|afZbRUU^kWo*p2_a087E#=;$cdu3aM*i=mWCMvY1-G)+s^&Gy*^NZD7@v^nFJ zEn7xYQdM$J zqX0X|X9Eq00_G&b4EX*2SC)~P4@#-D`H9idQKK4l0DXYx?%lg7JJ;3K5eNhbg+e@g z_RO3|Lqw8y$ZVf&OJ_H1=J`Z~f`S5kJ|9(8Rde`^jEoSA#f)a3A>e((QCL_wXHZE= z$!n3V0hqPWeHv2&0JwAK&Y}~_7U6K%sE&!qkj7NbX&m76>C-%a{@gBZ8S(h>V}ik; z(d+@xMC4zlGc-d(L!3Kz&L(>EBaujO{P=NnT?d!|K7;AksEB+E`~+~}!UYBf2JGUQ z7H7|%B@&4k%}+%n3^UWLRlseaLen&M?b?Ok@5kwM+CtbsG#aI|v(vn&-M~9CO?-Bu zyA}8zCnAEEc#v$kH_im?j{fjm~#(*06q~({y(4Us6jRG4bWoPoK7ce z)~s37qXxsn!{)#96Tnx%=OQvQlalTb1>gt9u>Y{fFF>Q^!yaZRr3!&Jd2!sP5vT!P pRW4Qse&@wen|>f9B54D%{{RsfdHbSpK`#IR002ovPDHLkV1m@7$GHFi literal 0 HcmV?d00001 diff --git a/theme/otalk/images/illustrations/illu_arrow-left-01.gif b/theme/otalk/images/illustrations/illu_arrow-left-01.gif new file mode 100644 index 0000000000000000000000000000000000000000..19777597655b4bc533abcc369e93c49e6e771d96 GIT binary patch literal 75 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 Date: Sun, 19 Apr 2009 23:45:03 +0000 Subject: [PATCH 20/24] Update to theme name in stylesheets. --- theme/otalk/css/base.css | 2 +- theme/otalk/css/display.css | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/theme/otalk/css/base.css b/theme/otalk/css/base.css index c8737ea166..fc82798c8b 100644 --- a/theme/otalk/css/base.css +++ b/theme/otalk/css/base.css @@ -1,4 +1,4 @@ -/** theme: italk base +/** theme: otalk base * * @package Laconica * @author Sarven Capadisli diff --git a/theme/otalk/css/display.css b/theme/otalk/css/display.css index 54350fcc6a..b6ee9aaeaa 100644 --- a/theme/otalk/css/display.css +++ b/theme/otalk/css/display.css @@ -1,4 +1,4 @@ -/** theme: identica +/** theme: otalk * * @package Laconica * @author Sarven Capadisli From 802c1f121b58651cf2d68207781c09bd8958e546 Mon Sep 17 00:00:00 2001 From: Sarven Capadisli Date: Mon, 20 Apr 2009 01:00:40 +0000 Subject: [PATCH 21/24] otalk theme update to overflows --- theme/otalk/css/base.css | 24 ++++++++++++++---------- theme/otalk/css/display.css | 8 +++----- 2 files changed, 17 insertions(+), 15 deletions(-) diff --git a/theme/otalk/css/base.css b/theme/otalk/css/base.css index fc82798c8b..379590d30f 100644 --- a/theme/otalk/css/base.css +++ b/theme/otalk/css/base.css @@ -731,14 +731,19 @@ list-style-type:none; #content .notice { width:25%; -margin-left:20px; +margin-left:17px; margin-bottom:47px; clear:none; overflow:hidden; -padding: 0 0 0 62px; -min-height:260px; +padding: 0 0 0 65px; +min-height:235px; } +#aside_primary .notice { +margin-bottom:18px; +} + + /* NOTICES */ #notices_primary { float:left; @@ -776,8 +781,8 @@ margin-bottom:0; } #content .notice .author .photo { -margin-left:-80px; -padding-right:14px; +margin-left:-83px; +padding-right:17px; } @@ -803,11 +808,11 @@ overflow:hidden; overflow:visible; margin-bottom:11px; padding:18px; -width:83%; +width:85%; border-radius:7px; -moz-border-radius:7px; -webkit-border-radius:7px; -min-height:165px; +min-height:161px; } #shownotice .notice .entry-title { @@ -880,10 +885,9 @@ outline:none; .notice-options { position:absolute; -bottom:110px; -left:29px; +top:120px; +left:30px; font-size:0.95em; -float:right; } .notice-options a { diff --git a/theme/otalk/css/display.css b/theme/otalk/css/display.css index b6ee9aaeaa..c039203393 100644 --- a/theme/otalk/css/display.css +++ b/theme/otalk/css/display.css @@ -74,7 +74,9 @@ color:#8F0000; border-color:#CEE1E9; } #content .notice .entry-title, -input, textarea, select, option { +input, textarea, select, option, +.pagination .nav_prev a, +.pagination .nav_next a { background-color:rgba(255,255,255,0.8); } @@ -84,19 +86,15 @@ background-color:rgba(255,255,255,0.9); #content .notice:nth-child(1) .entry-title { background-color:rgba(255,255,255,0.95); -font-size:2em; } #content .notice:nth-child(2) .entry-title { background-color:rgba(255,255,255,0.9); -font-size:1.9em; } #content .notice:nth-child(3) .entry-title { background-color:rgba(255,255,255,0.8); -font-size:1.8em; } #content .notice:nth-child(4) .entry-title { background-color:rgba(255,255,255,0.7); -font-size:1.7em; } #content .notice:nth-child(5) .entry-title { background-color:rgba(255,255,255,0.6); From 5d9862248bebf41bd1f97c03ec9f4f86fa206e82 Mon Sep 17 00:00:00 2001 From: Sarven Capadisli Date: Mon, 20 Apr 2009 01:58:49 +0000 Subject: [PATCH 22/24] otalk theme: anon_notice background colour update --- theme/otalk/css/display.css | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/theme/otalk/css/display.css b/theme/otalk/css/display.css index c039203393..22e0530ecc 100644 --- a/theme/otalk/css/display.css +++ b/theme/otalk/css/display.css @@ -171,13 +171,13 @@ background-color:#EFF3DC; } #anon_notice { -background-color:#87B4C8; +background-color:rgba(206, 225, 233, 0.7); color:#fff; border-color:#fff; } #showstream #anon_notice { -background-color:#9BB43E; +background-color:rgba(155, 180, 62, 0.7); } #export_data li a { From aadad4579fcdd3e62f5b8b8f2fcaa6cc282924f2 Mon Sep 17 00:00:00 2001 From: Sarven Capadisli Date: Mon, 20 Apr 2009 04:37:13 +0000 Subject: [PATCH 23/24] earthy theme preliminary (colours only) --- theme/earthy/css/base.css | 1176 +++++++++++++++++++++++ theme/earthy/css/display.css | 245 +++++ theme/earthy/css/ie.css | 9 + theme/earthy/default-avatar-mini.png | Bin 0 -> 646 bytes theme/earthy/default-avatar-profile.png | Bin 0 -> 2853 bytes theme/earthy/default-avatar-stream.png | Bin 0 -> 1487 bytes theme/earthy/logo.png | Bin 0 -> 4988 bytes 7 files changed, 1430 insertions(+) create mode 100644 theme/earthy/css/base.css create mode 100644 theme/earthy/css/display.css create mode 100644 theme/earthy/css/ie.css create mode 100644 theme/earthy/default-avatar-mini.png create mode 100644 theme/earthy/default-avatar-profile.png create mode 100644 theme/earthy/default-avatar-stream.png create mode 100644 theme/earthy/logo.png diff --git a/theme/earthy/css/base.css b/theme/earthy/css/base.css new file mode 100644 index 0000000000..8ff65ad507 --- /dev/null +++ b/theme/earthy/css/base.css @@ -0,0 +1,1176 @@ +/** theme: earthy base + * + * @package Laconica + * @author Sarven Capadisli + * @copyright 2009 Control Yourself, Inc. + * @license http://www.fsf.org/licensing/licenses/agpl-3.0.html GNU Affero General Public License version 3.0 + * @link http://laconi.ca/ + */ + +* { margin:0; padding:0; } +img { display:block; border:0; } +a abbr { cursor: pointer; border-bottom:0; } +table { border-collapse:collapse; } +ol { list-style-position:inside; } +html { background-color:#fff; height:100%; } +body { +background-color:#fff; +color:#000; +font-family:sans-serif; +font-size:1em; +line-height:1.65; +position:relative; +} +h1,h2,h3,h4,h5,h6 { +margin-bottom:7px; +overflow:hidden; +} +h1 { +font-size:1.4em; +margin-bottom:18px; +} +#showstream h1 { display:none; } +h2 { font-size:1.3em; } +h3 { font-size:1.2em; } +h4 { font-size:1.1em; } +h5 { font-size:1em; } +h6 { font-size:0.9em; } + +caption { +font-weight:bold; +} +legend { +font-weight:bold; +font-size:1.3em; +} +input, textarea, select, option { +padding:4px; +font-family:sans-serif; +font-size:1em; +} +input, textarea, select { +border-width:2px; +border-style: solid; +border-radius:4px; +-moz-border-radius:4px; +-webkit-border-radius:4px; +} + +input.submit { +font-weight:bold; +cursor:pointer; +} +textarea { +overflow:auto; +} +option { +padding-bottom:0; +} +fieldset { +padding:0; +border:0; +} +form ul li { +list-style-type:none; +margin:0 0 18px 0; +} +form label { +font-weight:bold; +} +input.checkbox { +position:relative; +top:2px; +left:0; +border:0; +} + +.error, +.success { +padding:4px 7px; +border-radius:4px; +-moz-border-radius:4px; +-webkit-border-radius:4px; +margin-bottom:18px; +} +form label.submit { +display:none; +} + +.form_settings { +clear:both; +} + +.form_settings fieldset { +margin-bottom:29px; +} +.form_settings input.remove { +margin-left:11px; +} +.form_settings .form_data li { +width:100%; +float:left; +} +.form_settings .form_data label { +float:left; +} +.form_settings .form_data textarea, +.form_settings .form_data select, +.form_settings .form_data input { +margin-left:11px; +float:left; +} +.form_settings .form_data input.submit { +margin-left:0; +} + +.form_settings label { +margin-top:2px; +width:152px; +} + +.form_actions label { +display:none; +} +.form_guide { +font-style:italic; +} + +.form_settings #settings_autosubscribe label { +display:inline; +font-weight:bold; +} + +#form_settings_profile legend, +#form_login legend, +#form_register legend, +#form_password legend, +#form_settings_avatar legend, +#newgroup legend, +#editgroup legend, +#form_tag_user legend, +#form_remote_subscribe legend, +#form_openid_login legend, +#form_search legend, +#form_invite legend, +#form_notice_delete legend, +#form_password_recover legend, +#form_password_change legend { +display:none; +} + +.form_settings .form_data p.form_guide { +clear:both; +margin-left:163px; +margin-bottom:0; +} + +.form_settings p { +margin-bottom:11px; +} + +.form_settings input.checkbox { +margin-top:3px; +margin-left:0; +} +.form_settings label.checkbox { +font-weight:normal; +margin-top:0; +margin-right:0; +margin-left:11px; +float:left; +width:90%; +} + + +#form_login p.form_guide, +#form_register #settings_rememberme p.form_guide, +#form_openid_login #settings_rememberme p.form_guide, +#settings_twitter_remove p.form_guide, +#form_search ul.form_data #q { +margin-left:0; +} + +.form_settings .form_note { +border-radius:4px; +-moz-border-radius:4px; +-webkit-border-radius:4px; +padding:0 7px; +} + + +.form_settings input.form_action-secondary { +margin-left:29px; +padding:0; +} + +#form_search .submit { +margin-left:11px; +} + +address { +float:left; +margin-bottom:18px; +margin-left:18px; +} +address.vcard img.logo { +margin-right:0; +} +address .fn { +font-weight:bold; +} +address img + .fn { +display:none; +} + +#header { +width:100%; +position:relative; +float:left; +padding-top:18px; +margin-bottom:29px; +} + +#site_nav_global_primary { +float:right; +margin-right:18px; +margin-bottom:11px; +margin-left:18px; +} +#site_nav_global_primary ul li { +display:inline; +margin-left:11px; +} + +.system_notice dt { +font-weight:bold; +text-transform:uppercase; +display:none; +} + +#site_notice { +position:absolute; +top:65px; +right:18px; +width:250px; +width:24%; +} +#page_notice { +clear:both; +margin-bottom:18px; +} + + +#anon_notice { +float:left; +width:43.2%; +padding:1.1%; +border-radius:7px; +-moz-border-radius:7px; +-webkit-border-radius:7px; +border-width:2px; +border-style:solid; +line-height:1.5; +font-size:1.1em; +font-weight:bold; +} + + +#footer { +float:left; +width:64%; +padding:18px; +} + +#site_nav_local_views { +float:right; +} +#site_nav_local_views dt { +display:none; +} +#site_nav_local_views li { +float:right; +margin-left:11px; +list-style-type:none; +} +#site_nav_local_views a { +float:left; +text-decoration:none; +padding:4px 11px; +-moz-border-radius-topleft:4px; +-moz-border-radius-topright:4px; +-webkit-border-top-left-radius:4px; +-webkit-border-top-right-radius:4px; +border-width:1px; +border-style:solid; +border-bottom:0; +text-shadow: 2px 2px 2px #ddd; +font-weight:bold; +} +#site_nav_local_views .nav { +float:left; +width:100%; +} + +#site_nav_global_primary dt, +#site_nav_global_secondary dt { +display:none; +} + +#site_nav_global_secondary { +margin-bottom:11px; +} + +#site_nav_global_secondary ul li { +display:inline; +margin-right:11px; +} +#export_data li a { +padding-left:20px; +} +#export_data li a.foaf { +padding-left:30px; +} +#export_data li a.export_vcard { +padding-left:28px; +} + +#export_data ul { +display:inline; +} +#export_data li { +list-style-type:none; +display:inline; +margin-left:11px; +} +#export_data li:first-child { +margin-left:0; +} + +#licenses { +font-size:0.9em; +} + +#licenses dt { +font-weight:bold; +display:none; +} +#licenses dd { +margin-bottom:11px; +line-height:1.5; +} + +#site_content_license_cc { +margin-bottom:0; +} +#site_content_license_cc img { +display:inline; +vertical-align:top; +margin-right:4px; +} + +#wrap { +margin:0 auto; +width:100%; +min-width:760px; +max-width:1003px; +overflow:hidden; +} + +#core { +position:relative; +width:100%; +float:left; +margin-bottom:1em; +} + +#content { +width:64.009%; +min-height:259px; +padding:1.795%; +float:right; +border-radius:7px; +-moz-border-radius:7px; +-moz-border-radius-topright:0; +-webkit-border-radius:7px; +-webkit-border-top-right-radius:0; +border-style:solid; +border-width:1px; +} + +#content_inner { +position:relative; +width:100%; +float:left; +} + +#aside_primary { +width:27.917%; +min-height:259px; +float:right; +margin-right:0.385%; +padding:1.795%; +border-radius:7px; +-moz-border-radius:7px; +-webkit-border-radius:7px; +border-width:1px; +border-style:solid; +} + +#form_notice { +width:45.664%; +float:left; +position:relative; +line-height:1; +} +#form_notice fieldset { +border:0; +padding:0; +} +#form_notice legend { +display:none; +} +#form_notice textarea { +float:left; +border-radius:7px; +-moz-border-radius:7px; +-webkit-border-radius:7px; +width:80.789%; +height:67px; +line-height:1.5; +padding:7px 7px 16px 7px; +} +#form_notice label { +display:block; +float:left; +font-size:1.3em; +margin-bottom:7px; +} +#form_notice #notice_submit label { +display:none; +} +#form_notice .form_note { +position:absolute; +top:99px; +right:98px; +z-index:9; +} +#form_notice .form_note dt { +font-weight:bold; +display:none; +} +#notice_text-count { +font-weight:bold; +line-height:1.15; +padding:1px 2px; +} +#form_notice #notice_action-submit { +width:14%; +height:47px; +padding:0; +position:absolute; +bottom:0; +right:0; +} +#form_notice label[for=to] { +margin-top:7px; +} +#form_notice select[id=to] { +margin-bottom:7px; +margin-left:18px; +float:left; +} + + +/* entity_profile */ +.entity_profile { +position:relative; +width:67.702%; +min-height:123px; +float:left; +margin-bottom:18px; +margin-left:0; +overflow:hidden; +} +.entity_profile dt, +#entity_statistics dt { +font-weight:bold; +} +.entity_profile dd { +display:inline; +} + +.entity_profile .entity_depiction { +float:left; +width:96px; +margin-right:18px; +margin-bottom:18px; +} + +.entity_profile .entity_fn, +.entity_profile .entity_nickname, +.entity_profile .entity_location, +.entity_profile .entity_url, +.entity_profile .entity_note, +.entity_profile .entity_tags { +margin-left:113px; +margin-bottom:4px; +} + +.entity_profile .entity_fn, +.entity_profile .entity_nickname { +margin-left:11px; +display:inline; +font-weight:bold; +} +.entity_profile .entity_nickname { +margin-left:0; +} + +.entity_profile .entity_fn dd:before { +content: "("; +font-weight:normal; +} +.entity_profile .entity_fn dd:after { +content: ")"; +font-weight:normal; +} + +.entity_profile dt { +display:none; +} +.entity_profile h2 { +display:none; +} +/* entity_profile */ + + +/*entity_actions*/ +.entity_actions { +float:right; +margin-left:4.35%; +max-width:25%; +} +.entity_actions h2 { +display:none; +} +.entity_actions ul { +list-style-type:none; +} +.entity_actions li { +margin-bottom:4px; +} +.entity_actions li:first-child { +border-top:0; +} +.entity_actions fieldset { +border:0; +padding:0; +} +.entity_actions legend { +display:none; +} + +.entity_actions input.submit { +display:block; +text-align:left; +width:100%; +} +.entity_actions a, +.entity_nudge p, +.entity_remote_subscribe { +text-decoration:none; +font-weight:bold; +display:block; +} + +.form_user_block input.submit, +.form_user_unblock input.submit, +.entity_send-a-message a, +.entity_edit a, +.form_user_nudge input.submit, +.entity_nudge p { +border:0; +padding-left:20px; +} + +.entity_edit a, +.entity_send-a-message a, +.entity_nudge p { +padding:4px 4px 4px 23px; +} + +.entity_remote_subscribe { +padding:4px; +border-width:2px; +border-style:solid; +border-radius:4px; +-moz-border-radius:4px; +-webkit-border-radius:4px; +} +.entity_actions .accept { +margin-bottom:18px; +} + +.entity_tags ul { +list-style-type:none; +display:inline; +} +.entity_tags li { +display:inline; +margin-right:4px; +} + +.aside .section { +margin-bottom:29px; +clear:both; +float:left; +width:100%; +} +.aside .section h2 { +text-transform:uppercase; +font-size:1em; +} + +#entity_statistics dt, +#entity_statistics dd { +display:inline; +} +#entity_statistics dt:after { +content: ":"; +} + +.section ul.entities { +float:left; +width:100%; +} +.section .entities li { +list-style-type:none; +float:left; +margin-right:7px; +margin-bottom:7px; +} +.section .entities li .photo { +margin-right:0; +margin-bottom:0; +} +.section .entities li .fn { +display:none; +} + +.aside .section p, +.aside .section .more { +clear:both; +} + +.profile .entity_profile { +margin-bottom:0; +min-height:60px; +} + + +.profile .form_group_join legend, +.profile .form_group_leave legend, +.profile .form_user_subscribe legend, +.profile .form_user_unsubscribe legend { +display:none; +} + +.profiles { +list-style-type:none; +} +.profile .entity_profile .entity_location { +width:auto; +clear:none; +margin-left:11px; +} +.profile .entity_profile dl, +.profile .entity_profile dd { +display:inline; +float:none; +} +.profile .entity_profile .entity_note, +.profile .entity_profile .entity_url, +.profile .entity_profile .entity_tags, +.profile .entity_profile .form_subscription_edit { +margin-left:59px; +clear:none; +display:block; +width:auto; +} +.profile .entity_profile .entity_tags dt { +display:inline; +margin-right:11px; +} + + +.profile .entity_profile .form_subscription_edit label { +font-weight:normal; +margin-right:11px; +} + + +/* NOTICE */ +.notice, +.profile { +position:relative; +padding-top:11px; +padding-bottom:11px; +clear:both; +float:left; +width:100%; +border-top-width:1px; +border-top-style:dotted; +} +.notices li { +list-style-type:none; +} +.notices li.hover { +border-radius:4px; +-moz-border-radius:4px; +-webkit-border-radius:4px; +} + +/* NOTICES */ +#notices_primary { +float:left; +width:100%; +border-radius:7px; +-moz-border-radius:7px; +-webkit-border-radius:7px; +} +#notices_primary h2 { +display:none; +} +.notice-data a span { +display:block; +padding-left:28px; +} + +.notice .author { +margin-right:11px; +} + +.fn { +overflow:hidden; +} + +.notice .author .fn { +font-weight:bold; +} + +.notice .author .photo { +margin-bottom:0; +} + +.vcard .photo { +display:inline; +margin-right:11px; +margin-bottom:11px; +float:left; +} +.vcard .url { +text-decoration:none; +} +.vcard .url:hover { +text-decoration:underline; +} + +.notice .entry-title { +float:left; +width:100%; +overflow:hidden; +} +#shownotice .notice .entry-title { +font-size:2.2em; +} + +.notice p.entry-content { +display:inline; +} + +#content .notice p.entry-content a:visited { +border-radius:4px; +-moz-border-radius:4px; +-webkit-border-radius:4px; +} +.notice p.entry-content .vcard a { +border-radius:4px; +-moz-border-radius:4px; +-webkit-border-radius:4px; +} + +.notice div.entry-content { +clear:left; +float:left; +font-size:0.95em; +margin-left:59px; +width:70%; +} +#showstream .notice div.entry-content { +margin-left:0; +} + +.notice .notice-options a, +.notice .notice-options input { +float:left; +font-size:1.025em; +} + +.notice div.entry-content dl, +.notice div.entry-content dt, +.notice div.entry-content dd { +display:inline; +} + +.notice div.entry-content .timestamp dt, +.notice div.entry-content .response dt { +display:none; +} +.notice div.entry-content .timestamp a { +display:inline-block; +} +.notice div.entry-content .device dt { +text-transform:lowercase; +} + + + +.notice-data { +position:absolute; +top:18px; +right:0; +min-height:50px; +margin-bottom:4px; +} +.notice .entry-content .notice-data dt { +display:none; +} + +.notice-data a { +display:block; +outline:none; +} + +.notice-options { +padding-left:2%; +float:left; +width:50%; +position:relative; +font-size:0.95em; +width:12.5%; +float:right; +} + +.notice-options a { +float:left; +} +.notice-options .notice_delete, +.notice-options .notice_reply, +.notice-options .form_favor, +.notice-options .form_disfavor { +position:absolute; +top:0; +} +.notice-options .form_favor, +.notice-options .form_disfavor { +left:0; +} +.notice-options .notice_reply { +left:29px; +} +.notice-options .notice_delete { +right:0; +} +.notice-options .notice_reply dt { +display:none; +} + +.notice-options input, +.notice-options a { +text-indent:-9999px; +outline:none; +} + +.notice-options .notice_reply a, +.notice-options input.submit { +display:block; +border:0; +} +.notice-options .notice_reply a, +.notice-options .notice_delete a { +text-decoration:none; +padding-left:16px; +} + +.notice-options form input.submit { +width:16px; +padding:2px 0; +} + +.notice-options .notice_delete dt, +.notice-options .form_favor legend, +.notice-options .form_disfavor legend { +display:none; +} +.notice-options .notice_delete fieldset, +.notice-options .form_favor fieldset, +.notice-options .form_disfavor fieldset { +border:0; +padding:0; +} + + +#usergroups #new_group { +float: left; +margin-right: 2em; +} +#new_group, #group_search { +margin-bottom:18px; +} +#new_group a { +padding-left:20px; +} + + +#filter_tags { +margin-bottom:11px; +float:left; +} +#filter_tags dt { +display:none; +} +#filter_tags ul { +list-style-type:none; +} +#filter_tags ul li { +float:left; +margin-left:7px; +padding-left:7px; +border-left-width:1px; +border-left-style:solid; +} +#filter_tags ul li.child_1 { +margin-left:0; +border-left:0; +padding-left:0; +} +#filter_tags ul li#filter_tags_all a { +font-weight:bold; +margin-top:7px; +float:left; +} + +#filter_tags ul li#filter_tags_item label { +margin-right:7px; +} +#filter_tags ul li#filter_tags_item label, +#filter_tags ul li#filter_tags_item select { +display:inline; +} +#filter_tags ul li#filter_tags_item p { +float:left; +margin-left:38px; +} +#filter_tags ul li#filter_tags_item input { +position:relative; +top:3px; +left:3px; +} + + + +.pagination { +float:left; +clear:both; +width:100%; +margin-top:18px; +} + +.pagination dt { +font-weight:bold; +display:none; +} + +.pagination .nav { +float:left; +width:100%; +list-style-type:none; +} + +.pagination .nav_prev { +float:left; +} +.pagination .nav_next { +float:right; +} + +.pagination a { +display:block; +text-decoration:none; +font-weight:bold; +padding:7px; +border-width:1px; +border-style:solid; +-moz-border-radius:7px; +-webkit-border-radius:7px; +border-radius:7px; +} + +.pagination .nav_prev a { +padding-left:30px; +} +.pagination .nav_next a { +padding-right:30px; +} +/* END: NOTICE */ + + +.hentry .entry-content p { +margin-bottom:18px; +} +.hentry entry-content ol, +.hentry .entry-content ul { +list-style-position:inside; +} +.hentry .entry-content li { +margin-bottom:18px; +} +.hentry .entry-content li li { +margin-left:18px; +} + + + + +/* TOP_POSTERS */ +.section tbody td { +padding-right:11px; +padding-bottom:11px; +} +.section .vcard .photo { +margin-right:7px; +margin-bottom:0; +} + +.section .notice { +padding-top:7px; +padding-bottom:7px; +border-top:0; +} + +.section .notice:first-child { +padding-top:0; +} + +.section .notice .author { +margin-right:0; +} +.section .notice .author .fn { +display:none; +} + + +/* tagcloud */ +.tag-cloud { +list-style-type:none; +text-align:center; +} +.aside .tag-cloud { +font-size:0.8em; +} +.tag-cloud li { +display:inline; +margin-right:7px; +line-height:1.25; +} +.aside .tag-cloud li { +line-height:1.5; +} +.tag-cloud li a { +text-decoration:none; +} +#tagcloud.section dt { +text-transform:uppercase; +font-weight:bold; +} +.tag-cloud-1 { +font-size:1em; +} +.tag-cloud-2 { +font-size:1.25em; +} +.tag-cloud-3 { +font-size:1.75em; +} +.tag-cloud-4 { +font-size:2em; +} +.tag-cloud-5 { +font-size:2.25em; +} +.tag-cloud-6 { +font-size:2.75em; +} +.tag-cloud-7 { +font-size:3.25em; +} + +#publictagcloud #tagcloud.section dt { +display:none; +} + +#form_settings_photo .form_data { +clear:both; +} + +#form_settings_avatar li { +width:auto; +} +#form_settings_avatar input { +margin-left:0; +} +#avatar_original, +#avatar_preview { +float:left; +} +#avatar_preview { +margin-left:29px; +} +#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; +} + +#form_settings_design #settings_design_color .form_data, +#form_settings_design #color-picker { +float:left; +} +#form_settings_design #settings_design_color .form_data { +width:400px; +margin-right:28px; +} + +.instructions ul { +list-style-position:inside; +} +.instructions p, +.instructions ul { +margin-bottom:18px; +} +.help dt { +display:none; +} +.guide { +clear:both; +} diff --git a/theme/earthy/css/display.css b/theme/earthy/css/display.css new file mode 100644 index 0000000000..809ac8bc06 --- /dev/null +++ b/theme/earthy/css/display.css @@ -0,0 +1,245 @@ +/** theme: earthy + * + * @package Laconica + * @author Sarven Capadisli + * @copyright 2009 Control Yourself, Inc. + * @license http://www.fsf.org/licensing/licenses/agpl-3.0.html GNU Affero General Public License version 3.0 + * @link http://laconi.ca/ + */ + +@import url(base.css); + +html, +body, +a:active { +background-color:#665500; +} +body { +font-family: Verdana, sans-serif; +font-size:1em; +} +address { +margin-right:7.18%; +} + +input, textarea, select, option { +font-family: Verdana, sans-serif; +} +input, textarea, select, +.entity_remote_subscribe { +border-color:#aaa; +} +#filter_tags ul li { +border-color:#ddd; +} + +.form_settings input.form_action-secondary { +background:none; +} + +input.submit, +#form_notice.warning #notice_text-count, +.form_settings .form_note, +.entity_remote_subscribe { +background-color:#9BB43E; +} + +input:focus, textarea:focus, select:focus, +#form_notice.warning #notice_data-text { +border-color:#9BB43E; +} +input.submit, +.entity_remote_subscribe { +color:#dddd33; +} + +a, +div.notice-options input, +.form_user_block input.submit, +.form_user_unblock input.submit, +.entity_send-a-message a, +.form_user_nudge input.submit, +.entity_nudge p, +.form_settings input.form_action-secondary { +color:#ee4400; +} + +.notice, +.profile { +border-top-color:#DDAA00; +} +.section .profile { +border-top-color:#aaaa66; +} + +#content .notice p.entry-content a:visited { +background-color:#fcfcfc; +} +#content .notice p.entry-content .vcard a { +background-color:#fcfffc; +} + +#aside_primary { +background-color:#DDAA00; +} + +#notice_text-count { +color:#333; +} +#form_notice.warning #notice_text-count { +color:#000; +} +#form_notice.processing #notice_action-submit { +background:#dddd33 url(../../base/images/icons/icon_processing.gif) no-repeat 47% 47%; +cursor:wait; +text-indent:-9999px; +} + +#content, +#site_nav_local_views a, +#aside_primary { +border-color:#dddd33; +} +#content, +#site_nav_local_views .current a { +background-color:#dddd33; +} +#site_nav_local_views .current a { +color:#EE4400; +} +#site_nav_local_views a { +background-color:rgba(135, 180, 200, 0.3); +color:#fff; +} +#site_nav_local_views a:hover { +background-color:rgba(255, 255, 255, 0.7); +} + +.error { +background-color:#F7E8E8; +} +.success { +background-color:#EFF3DC; +} + +#anon_notice { +background-color:#aaaa66; +color:#dddd33; +border-color:#dddd33; +} + +#showstream #anon_notice { +background-color:#9BB43E; +} + +#export_data li a { +background-repeat:no-repeat; +background-position:0 45%; +} +#export_data li a.rss { +background-image:url(../../base/images/icons/icon_rss.png); +} +#export_data li a.atom { +background-image:url(../../base/images/icons/icon_atom.png); +} +#export_data li a.foaf { +background-image:url(../../base/images/icons/icon_foaf.gif); +} + +.entity_edit a, +.entity_send-a-message a, +.form_user_nudge input.submit, +.form_user_block input.submit, +.form_user_unblock input.submit, +.entity_nudge p { +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:#9BB43E; +color:#dddd33; +} +.form_user_unsubscribe input.submit, +.form_group_leave input.submit, +.form_user_authorization input.reject { +background-color:#aaaa66; +} + +.entity_edit a { +background-image:url(../../base/images/icons/twotone/green/edit.gif); +} +.entity_send-a-message a { +background-image:url(../../base/images/icons/twotone/green/quote.gif); +} +.entity_nudge p, +.form_user_nudge input.submit { +background-image:url(../../base/images/icons/twotone/green/mail.gif); +} +.form_user_block input.submit, +.form_user_unblock input.submit { +background-image:url(../../base/images/icons/twotone/green/shield.gif); +} + +/* NOTICES */ +.notices li.over { +background-color:#fcfcfc; +} + +.notice-options .notice_reply a, +.notice-options form input.submit { +background-color:transparent; +} +.notice-options .notice_reply a { +background:transparent url(../../base/images/icons/twotone/green/reply.gif) no-repeat 0 45%; +} +.notice-options form.form_favor input.submit { +background:transparent url(../../base/images/icons/twotone/green/favourite.gif) no-repeat 0 45%; +} +.notice-options form.form_disfavor input.submit { +background:transparent url(../../base/images/icons/twotone/green/disfavourite.gif) no-repeat 0 45%; +} +.notice-options .notice_delete a { +background:transparent url(../../base/images/icons/twotone/green/trash.gif) no-repeat 0 45%; +} + +.notices div.entry-content, +.notices div.notice-options { +opacity:0.4; +} +.notices li.hover div.entry-content, +.notices li.hover div.notice-options { +opacity:1; +} +div.entry-content { +color:#333; +} +div.notice-options a, +div.notice-options input { +font-family:sans-serif; +} +.notices li.hover { +/*background-color:#fcfcfc;*/ +} +/*END: NOTICES */ + +#new_group a { +background:transparent url(../../base/images/icons/twotone/green/news.gif) no-repeat 0 45%; +} + +.pagination .nav_prev a, +.pagination .nav_next a { +background-repeat:no-repeat; +border-color:#DDAA00; +} +.pagination .nav_prev a { +background-image:url(../../base/images/icons/twotone/green/arrow-left.gif); +background-position:10% 45%; +} +.pagination .nav_next a { +background-image:url(../../base/images/icons/twotone/green/arrow-right.gif); +background-position:90% 45%; +} diff --git a/theme/earthy/css/ie.css b/theme/earthy/css/ie.css new file mode 100644 index 0000000000..2f463bb44d --- /dev/null +++ b/theme/earthy/css/ie.css @@ -0,0 +1,9 @@ +/* IE specific styles */ + +.notice-options input.submit { +color:#fff; +} + +#site_nav_local_views a { +background-color:#D0DFE7; +} diff --git a/theme/earthy/default-avatar-mini.png b/theme/earthy/default-avatar-mini.png new file mode 100644 index 0000000000000000000000000000000000000000..38b8692b4a2f71c8de3d6a12b715df33aada5f7c GIT binary patch literal 646 zcmV;10(t$3P)t7_1ao1dG5H5=fedf?I_U zERrsbGN6ogMr}` z=geF#+zTQC5di=LaBdjJM@3P-0idfKA;f20*DnA(@I8qLjEKM(3u~J8S_pAFm&<9f zSPbEC7@TwLgOn1}=@gFRpkA-LjIlSH&E_!?ePIBYs;Zr6Ga4*xpF`v&- zEEdi`SF2Su6bfC-+-EQtpin4yM0AgV_}m^LaEH4M-{d zNe9pK002AF4@7iH=bR&(&2Ehsiv@`2laNxrAB{#2)9Ew=0L!vqS=K>6*rng^e_gNF z@3`x_^;WAT4=u}|=ytns97hAt;6zjd&?=Y9n`49wheK2$*>gXpP+!1HdC8#9K|%7P#8l;_13R g5kkBIaJK9D9f4f}@hqK`?*IS*07*qoM6N<$f=KKaB>(^b literal 0 HcmV?d00001 diff --git a/theme/earthy/default-avatar-profile.png b/theme/earthy/default-avatar-profile.png new file mode 100644 index 0000000000000000000000000000000000000000..f8357d4fc296271b837b3d9911cfbc133918ef2f GIT binary patch literal 2853 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 MfY_K+7Z|aDy3W6;R?}) zJJa7D+8b}%q`4{D>!4paaL(^{&bi<3xi|OxZhl9J2i|dE0WSwJ z;8&o3y8I|2|D^3LB6AAh1ik=tKx{650`H~bDI%!ZcR(rC1bhe718ACt%jLrDcH?%t zsjjXjCnqQSb+v$ri3#rCzt6pU_lQIyjE#+%-9G>yipXCx_?iVMr9J?@266xz8X9P8 zYooHV@|6(Ign@wpIy*awMx%!5Z{TeaxosGd0+dqgn0n^&moHz={{8#ev17+#bDo2E zJkFUjXSj6flJR)|25b=#9i{~+rE-CvflW@QlM^RS;BvWaq&*i`u3X{NsZ&PtOA+}5 zK$|uk1vUZf+qdtvBM;Eh(!%D=n~mm2N~yO1G^JDl@G*eb>t*N8oim5o3i!0z3_V#k~=FJ5Y5fL6fe8}a?ml+uuu{^G}w$|L-;$Zs6JIj$0x~_BN z$PvQfu<=TxwzihNd-u}N&|sOw;NTz~9UY91j{}gClY`Ia!|(S~US2-$*ouk@%F4=k z^5hA?CJiVBC@U+=c;T+DE(Qk&F>ij6NQ91#4&w2+CGxtibMoZLBzb^DBEi+GR|y0H zmgXoeElpOn`8t~M;K2hfUc8vn7mvree*L9I7=(9lp?pRVhKLLsY^fGh+wHa6mLq>rRmtXN@bp62G}dHpL_uCz)C z$U;C-QBm59mz0#SXU`r>^K9F;jl8_Pls=!&$NKf_tx^KA5CGu!`|*0cGi(lrgF}Z7 zQCwVXX^w(|0uCQOJm-#8R#tN0z=3S&OkF>l&Z}3iroFwLTeoh}-`~%M4I8MhueZE^ z7}&mjJ6pGIB^V5%>pEVqmztWI1w{c1`aJY_Ja{~wg$zw1H#hgC#9diELa!s11lWxw z0d`|afZbRUU^kWo*p2_a087E#=;$cdu3aM*i=mWCMvY1-G)+s^&Gy*^NZD7@v^nFJ zEn7xYQdM$J zqX0X|X9Eq00_G&b4EX*2SC)~P4@#-D`H9idQKK4l0DXYx?%lg7JJ;3K5eNhbg+e@g z_RO3|Lqw8y$ZVf&OJ_H1=J`Z~f`S5kJ|9(8Rde`^jEoSA#f)a3A>e((QCL_wXHZE= z$!n3V0hqPWeHv2&0JwAK&Y}~_7U6K%sE&!qkj7NbX&m76>C-%a{@gBZ8S(h>V}ik; z(d+@xMC4zlGc-d(L!3Kz&L(>EBaujO{P=NnT?d!|K7;AksEB+E`~+~}!UYBf2JGUQ z7H7|%B@&4k%}+%n3^UWLRlseaLen&M?b?Ok@5kwM+CtbsG#aI|v(vn&-M~9CO?-Bu zyA}8zCnAEEc#v$kH_im?j{fjm~#(*06q~({y(4Us6jRG4bWoPoK7ce z)~s37qXxsn!{)#96Tnx%=OQvQlalTb1>gt9u>Y{fFF>Q^!yaZRr3!&Jd2!sP5vT!P pRW4Qse&@wen|>f9B54D%{{RsfdHbSpK`#IR002ovPDHLkV1m@7$GHFi literal 0 HcmV?d00001 diff --git a/theme/earthy/logo.png b/theme/earthy/logo.png new file mode 100644 index 0000000000000000000000000000000000000000..7c68b34f61008753d12394806c3cf46f7b04effd GIT binary patch literal 4988 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 Date: Mon, 20 Apr 2009 05:06:38 +0000 Subject: [PATCH 24/24] earthy theme: layout experiment --- theme/earthy/css/base.css | 36 ++++++++++++++++++++++++------------ theme/earthy/css/display.css | 14 ++++++++++---- 2 files changed, 34 insertions(+), 16 deletions(-) diff --git a/theme/earthy/css/base.css b/theme/earthy/css/base.css index 8ff65ad507..6f46eef978 100644 --- a/theme/earthy/css/base.css +++ b/theme/earthy/css/base.css @@ -28,6 +28,7 @@ overflow:hidden; h1 { font-size:1.4em; margin-bottom:18px; +text-align:right; } #showstream h1 { display:none; } h2 { font-size:1.3em; } @@ -309,6 +310,8 @@ font-weight:bold; #site_nav_local_views .nav { float:left; width:100%; +border-bottom-width:1px; +border-bottom-style:solid; } #site_nav_global_primary dt, @@ -384,17 +387,15 @@ margin-bottom:1em; } #content { -width:64.009%; +width:63.009%; min-height:259px; -padding:1.795%; +padding-top:1.795%; +padding-bottom:1.795%; float:right; +clear:both; border-radius:7px; --moz-border-radius:7px; --moz-border-radius-topright:0; --webkit-border-radius:7px; --webkit-border-top-right-radius:0; border-style:solid; -border-width:1px; +border-width:0; } #content_inner { @@ -407,7 +408,8 @@ float:left; width:27.917%; min-height:259px; float:right; -margin-right:0.385%; +margin-right:4.385%; +margin-top:73px; padding:1.795%; border-radius:7px; -moz-border-radius:7px; @@ -713,14 +715,24 @@ margin-right:11px; .notice, .profile { position:relative; -padding-top:11px; -padding-bottom:11px; clear:both; float:left; width:100%; -border-top-width:1px; -border-top-style:dotted; +border-width:1px; +border-style:solid; +border-radius:7px; +-moz-border-radius:7px; +-webkit-border-radius:7px; } +#content .notice, +#content .profile { +padding:1.795%; +margin-bottom:44px; +} +#content .notice { +width:96.25%; +} + .notices li { list-style-type:none; } diff --git a/theme/earthy/css/display.css b/theme/earthy/css/display.css index 809ac8bc06..b67700f2d9 100644 --- a/theme/earthy/css/display.css +++ b/theme/earthy/css/display.css @@ -22,6 +22,10 @@ address { margin-right:7.18%; } +h1 { +color:#fff; +} + input, textarea, select, option { font-family: Verdana, sans-serif; } @@ -66,7 +70,7 @@ color:#ee4400; .notice, .profile { -border-top-color:#DDAA00; +border-color:#DDAA00; } .section .profile { border-top-color:#aaaa66; @@ -96,11 +100,13 @@ text-indent:-9999px; } #content, +#site_nav_local_views .nav, #site_nav_local_views a, #aside_primary { border-color:#dddd33; } -#content, +#content .notice, +#content .profile, #site_nav_local_views .current a { background-color:#dddd33; } @@ -108,11 +114,11 @@ background-color:#dddd33; color:#EE4400; } #site_nav_local_views a { -background-color:rgba(135, 180, 200, 0.3); +background-color:rgba(255, 255, 255, 0.2); color:#fff; } #site_nav_local_views a:hover { -background-color:rgba(255, 255, 255, 0.7); +background-color:rgba(255, 255, 255, 0.4); } .error {