desktop clients that support the Twitter API.
Laconica supports an open standard called OpenMicroBlogging
-(http://openmicroblogging.org/) that lets users on different Web sites
+<http://openmicroblogging.org/> that lets users on different Web sites
or in different companies subscribe to each others' notices. It
enables a distributed social network spread all across the Web.
Laconica was originally developed for the Open Software Service,
-Identi.ca (http://identi.ca/). It is shared with you in hope that you
+Identi.ca <http://identi.ca/>. It is shared with you in hope that you
too make an Open Software Service available to your users. To learn
-more, please see the Open Software Service Definition 1.0:
+more, please see the Open Software Service Definition 1.1:
http://www.opendefinition.org/ossd
XMPP
----
-XMPP (eXtended Message and Presence Protocol, http://xmpp.org/) is the
+XMPP (eXtended Message and Presence Protocol, <http://xmpp.org/>) is the
instant-messenger protocol that drives Jabber and GTalk IM. You can
distribute messages via XMPP using the system below; however, you
need to run the XMPP incoming daemon to allow incoming messages as
Sitemaps
--------
-Sitemap files (http://sitemaps.org/) are a very nice way of telling
+Sitemap files <http://sitemaps.org/> are a very nice way of telling
search engines and other interested bots what's available on your site
and what's changed recently. You can generate sitemap files for your
Laconica instance.
like './sitemapindex.xml'. sitemap-directory is the directory where
you want the sitemaps stored, like './sitemaps/' (make sure the dir
exists). URL-prefix-for-sitemaps is the full URL for the sitemap dir,
- typically something like 'http://example.net/mublog/sitemaps/'.
+ typically something like <http://example.net/mublog/sitemaps/>.
You can use several methods for submitting your sitemap index to
search engines to get your site indexed. One is to add a line like the
Translation
-----------
-Translations in Laconica use the gettext system (http://www.gnu.org/software/gettext/).
+Translations in Laconica use the gettext system <http://www.gnu.org/software/gettext/>.
Theoretically, you can add your own sub-directory to the locale/
subdirectory to add a new language to your system. You'll need to
compile the ".po" files into ".mo" files, however.
There is no built-in system for doing backups in Laconica. You can make
backups of a working Laconica system by backing up the database and
-the Web directory. To backup the database use mysqldump (http://ur1.ca/7xo)
+the Web directory. To backup the database use mysqldump <http://ur1.ca/7xo>
and to backup the Web directory, try tar.
Private
--
This section is a reference to the configuration options for
-DB_DataObject (see http://ur1.ca/7xp). The ones that you may want to
+DB_DataObject (see <http://ur1.ca/7xp>). The ones that you may want to
set are listed below for clarity.
database: a DSN (Data Source Name) for your Laconica database. This is
the client to speed up page loading, either with another
virtual server or with an NFS or SAMBA share. Clients
typically only make 2 connections to a single server at a
- time (http://ur1.ca/6ih), so this can parallelize the job.
+ time <http://ur1.ca/6ih>, so this can parallelize the job.
Defaults to null.
public
---------
You can get a significant boost in performance by caching some
-database data in memcached (http://www.danga.com/memcached/).
+database data in memcached <http://www.danga.com/memcached/>.
enabled: Set to true to enable. Default false.
server: a string with the hostname of the memcached server. Can also
You can get a significant boost in performance using Sphinx Search
instead of your database server to search for users and notices.
-(http://sphinxsearch.com/).
+<http://sphinxsearch.com/>.
enabled: Set to true to enable. Default false.
server: a string with the hostname of the sphinx server.
source: The name to use for the source of posts to Twitter. Defaults
to 'laconica', but if you request your own source name from
- Twitter (http://twitter.com/help/request_source), you can use
+ Twitter <http://twitter.com/help/request_source>, you can use
that here instead. Status updates on Twitter will then have
links to your site.
If you're adventurous or impatient, you may want to install the
development version of Laconica. To get it, use the git version
-control tool (http://git-scm.com/) like so:
+control tool <http://git-scm.com/> like so:
git clone http://laconi.ca/software/laconica.git
* There is a mailing list for Laconica developers and admins at
http://mail.laconi.ca/mailman/listinfo/laconica-dev
-* The #laconica IRC channel on freenode.net (http://www.freenode.net/).
+* The #laconica IRC channel on freenode.net <http://www.freenode.net/>.
* The Laconica wiki, http://laconi.ca/trac/
Feedback
$this->pagination($this->page > 1, $cnt > NOTICES_PER_PAGE,
$this->page, 'all', array('nickname' => $this->user->nickname));
}
+
+ function showPageTitle()
+ {
+ $user =& common_current_user();
+ if ($user && ($user->id == $this->user->id)) {
+ $this->element('h1', NULL, _("You and friends"));
+ } else {
+ $this->element('h1', NULL, sprintf(_('%s and friends'), $this->user->nickname));
+ }
+ }
+
}
$this->serverError(_('Lost our file data.'));
return;
}
-
+
// If image is not being cropped assume pos & dimentions of original
$dest_x = $this->arg('avatar_crop_x') ? $this->arg('avatar_crop_x'):0;
$dest_y = $this->arg('avatar_crop_y') ? $this->arg('avatar_crop_y'):0;
$dest_h = $this->arg('avatar_crop_h') ? $this->arg('avatar_crop_h'):$filedata['height'];
$size = min($dest_w, $dest_h);
$size = ($size > MAX_ORIGINAL) ? MAX_ORIGINAL:$size;
-
+
$user = common_current_user();
$profile = $user->getProfile();
-
+
$imagefile = new ImageFile($user->id, $filedata['filepath']);
$filename = $imagefile->resize($size, $dest_x, $dest_y, $dest_w, $dest_h);
function showNoticeForm()
{
-
$post_action = "$this->app_uri/index.php";
$notice_form = new FacebookNoticeForm($this, $post_action, null,
$post_action, $this->user);
$notice_form->show();
-
-
}
function title()
function showContent()
{
-
$notice = $this->user->noticesWithFriends(($this->page-1) *
NOTICES_PER_PAGE, NOTICES_PER_PAGE + 1);
$this->pagination($this->page > 1, $cnt > NOTICES_PER_PAGE,
$this->page, 'index.php', array('nickname' => $this->user->nickname));
-
}
function showNoticeList($notice)
$friend_ids = $_POST['ids']; // XXX: Hmm... is this the best way to acces the list?
- $this->elementStart("ul");
+ $this->elementStart('ul', array('id' => 'facebook-friends'));
foreach ($friend_ids as $friend) {
$this->elementStart('li');
$this->element('h2', null, sprintf(_('Friends already using %s:'),
common_config('site', 'name')));
- $this->elementStart("ul");
-
+ $this->elementStart('ul', array('id' => 'facebook-friends'));
+
foreach ($exclude_ids as $friend) {
$this->elementStart('li');
- $this->element('fb:profile-pic', array('uid' => $friend));
+ $this->element('fb:profile-pic', array('uid' => $friend, 'size' => 'square'));
$this->element('fb:name', array('uid' => $friend,
'capitalize' => 'true'));
$this->elementEnd('li');
function handle($args)
{
parent::handle($args);
- if (common_logged_in()) {
+ if (common_is_real_login()) {
$this->clientError(_('Already logged in.'));
} else if ($_SERVER['REQUEST_METHOD'] == 'POST') {
$token = $this->trimmed('token');
{
// XXX: login throttle
- // CSRF protection - token set in common_notice_form()
+ // CSRF protection - token set in NoticeForm
$token = $this->trimmed('token');
if (!$token || $token != common_session_token()) {
$this->clientError(_('There was a problem with your session token. '.
$nickname = common_canonical_nickname($this->trimmed('nickname'));
$password = $this->arg('password');
- if (common_check_user($nickname, $password)) {
- // success!
- if (!common_set_user($nickname)) {
- $this->serverError(_('Error setting user.'));
- return;
- }
- common_real_login(true);
- if ($this->boolean('rememberme')) {
- common_debug('Adding rememberme cookie for ' . $nickname);
- common_rememberme();
- }
- // success!
- $url = common_get_returnto();
- if ($url) {
- // We don't have to return to it again
- common_set_returnto(null);
- } else {
- $url = common_local_url('all',
- array('nickname' =>
- $nickname));
- }
- common_redirect($url);
- } else {
+
+ if (!common_check_user($nickname, $password)) {
$this->showForm(_('Incorrect username or password.'));
return;
}
// success!
- if (!common_set_user($user)) {
+ if (!common_set_user($nickname)) {
$this->serverError(_('Error setting user.'));
return;
}
common_real_login(true);
if ($this->boolean('rememberme')) {
- common_debug('Adding rememberme cookie for ' . $nickname);
common_rememberme($user);
}
- // success!
+
$url = common_get_returnto();
+
if ($url) {
// We don't have to return to it again
common_set_returnto(null);
array('nickname' =>
$nickname));
}
+
common_redirect($url);
}
$this->clientError(_('Not logged in.'));
} else if ($_SERVER['REQUEST_METHOD'] == 'POST') {
- // CSRF protection - token set in common_notice_form()
+ // CSRF protection
$token = $this->trimmed('token');
if (!$token || $token != common_session_token()) {
$this->clientError(_('There was a problem with your session token. '.
if ($cmd) {
if ($this->boolean('ajax')) {
- $cmd->execute(new AjaxWebChannel());
+ $cmd->execute(new AjaxWebChannel($this));
} else {
- $cmd->execute(new WebChannel());
+ $cmd->execute(new WebChannel($this));
}
return;
}
function ajaxErrorMsg($msg)
{
- common_start_html('text/xml;charset=utf-8', true);
+ $this->startHTML('text/xml;charset=utf-8', true);
$this->elementStart('head');
$this->element('title', null, _('Ajax Error'));
$this->elementEnd('head');
function handle($args)
{
parent::handle($args);
- if (common_logged_in()) {
+ if (common_is_real_login()) {
$this->clientError(_('Already logged in.'));
} else if ($_SERVER['REQUEST_METHOD'] == 'POST') {
$openid_url = $this->trimmed('openid_url');
function getInstructions()
{
- return _('Login with an [OpenID](%%doc.openid%%) account.');
+ if (common_logged_in() && !common_is_real_login() &&
+ common_get_returnto()) {
+ // rememberme logins have to reauthenticate before
+ // changing any profile settings (cookie-stealing protection)
+ return _('For security reasons, please re-login with your ' .
+ '[OpenID](%%doc.openid%%) ' .
+ 'before changing your settings.');
+ } else {
+ return _('Login with an [OpenID](%%doc.openid%%) account.');
+ }
}
function showPageNotice()
$short_name = _('Notice Search');
}
header('Content-Type: text/html');
- common_start_xml();
+ $this->startXML();
$this->elementStart('OpenSearchDescription', array('xmlns' => 'http://a9.com/-/spec/opensearch/1.1/'));
$short_name = common_config('site', 'name').' '.$short_name;
$this->element('ShortName', null, $short_name);
$this->element('OutputEncoding', null, 'UTF-8');
$this->element('InputEncoding', null, 'UTF-8');
$this->elementEnd('OpenSearchDescription');
- common_end_xml();
+ $this->endXML();
}
function isReadOnly()
function showPageTitle()
{
- $this->element('h1', NULL, $this->profile->nickname._("'s profile"));
+ $user =& common_current_user();
+ if ($user && ($user->id == $this->profile->id)) {
+ $this->element('h1', NULL, _("Your profile"));
+ } else {
+ $this->element('h1', NULL, sprintf(_('%s\'s profile'), $this->profile->nickname));
+ }
}
function showPageNoticeBlock()
function showFeeds()
{
- // Feeds
- $this->element('link', array('rel' => 'alternate',
- 'href' => common_local_url('api',
- array('apiaction' => 'statuses',
- 'method' => 'entity_timeline.rss',
- 'argument' => $this->user->nickname)),
- 'type' => 'application/rss+xml',
- 'title' => sprintf(_('Notice feed for %s'), $this->user->nickname)));
- $this->element('link', array('rel' => 'alternate feed',
- 'href' => common_local_url('api',
- array('apiaction' => 'statuses',
- 'method' => 'entity_timeline.atom',
- 'argument' => $this->user->nickname)),
- 'type' => 'application/atom+xml',
- 'title' => sprintf(_('Notice feed for %s'), $this->user->nickname)));
$this->element('link', array('rel' => 'alternate',
- 'href' => common_local_url('userrss', array('nickname' =>
- $this->user->nickname)),
- 'type' => 'application/rdf+xml',
- 'title' => sprintf(_('Notice feed for %s'), $this->user->nickname)));
+ 'type' => 'application/rss+xml',
+ 'href' => common_local_url('userrss',
+ array('nickname' => $this->user->nickname)),
+ 'title' => sprintf(_('Notice feed for %s (RSS)'),
+ $this->user->nickname)));
+
+ $this->element('link',
+ array('rel' => 'alternate',
+ 'href' => common_local_url('api',
+ array('apiaction' => 'statuses',
+ 'method' => 'user_timeline.atom',
+ 'argument' => $this->user->nickname)),
+ 'type' => 'application/atom+xml',
+ 'title' => sprintf(_('Notice feed for %s (Atom)'),
+ $this->user->nickname)));
}
function extraHead()
}
$this->elementEnd('div');
- //XXX: entity_actions doesn't need to be outputted if entity is looking at their own profile
$this->elementStart('div', 'entity_actions');
$this->element('h2', null, _('User actions'));
$this->elementStart('ul');
- $this->elementStart('li', array('class' => 'entity_subscribe'));
$cur = common_current_user();
+
+ if ($cur && $cur->id == $this->profile->id) {
+ $this->elementStart('li', 'entity_edit');
+ $this->element('a', array('href' => common_local_url('profilesettings'),
+ 'title' => _('Edit profile settings')),
+ _('Edit'));
+ $this->elementEnd('li');
+ }
+
if ($cur) {
if ($cur->id != $this->profile->id) {
+ $this->elementStart('li', 'entity_subscribe');
if ($cur->isSubscribed($this->profile)) {
$usf = new UnsubscribeForm($this, $this->profile);
$usf->show();
$sf = new SubscribeForm($this, $this->profile);
$sf->show();
}
+ $this->elementEnd('li');
}
} else {
+ $this->elementStart('li', 'entity_subscribe');
$this->showRemoteSubscribeLink();
+ $this->elementEnd('li');
}
- $this->elementEnd('li');
-
-// common_profile_new_message_nudge($cur, $this->user, $this->profile);
$user = User::staticGet('id', $this->profile->id);
if ($cur && $cur->id != $user->id && $cur->mutuallySubscribed($user)) {
- $this->elementStart('li', array('class' => 'entity_send-a-message'));
+ $this->elementStart('li', 'entity_send-a-message');
$this->element('a', array('href' => common_local_url('newmessage', array('to' => $user->id)),
'title' => _('Send a direct message to this user')),
_('Message'));
$this->elementEnd('li');
if ($user->email && $user->emailnotifynudge) {
- $this->elementStart('li', array('class' => 'entity_nudge'));
+ $this->elementStart('li', 'entity_nudge');
$nf = new NudgeForm($this, $user);
$nf->show();
$this->elementEnd('li');
if ($cur && $cur->id != $this->profile->id) {
$blocked = $cur->hasBlocked($this->profile);
- $this->elementStart('li', array('class' => 'entity_block'));
+ $this->elementStart('li', 'entity_block');
if ($blocked) {
$ubf = new UnblockForm($this, $this->profile);
$ubf->show();
if ($user->id == $notice->profile_id) {
$replies = new Reply;
$replies->get('notice_id', $notice_id);
- common_dequeue_notice($notice);
$replies->delete();
$notice->delete();
class Channel
{
-
+
function on($user)
{
return false;
{
return false;
}
-
+
function error($user, $text)
{
return false;
}
-
+
function source()
{
return null;
{
var $conn = null;
-
+
function source()
{
return 'xmpp';
}
-
+
function __construct($conn)
{
$this->conn = $conn;
}
-
+
function on($user)
{
return $this->set_notify($user, 1);
}
-
+
function off($user)
{
return $this->set_notify($user, 0);
$text = '['.common_config('site', 'name') . '] ' . $text;
jabber_send_message($user->jabber, $text);
}
-
+
function error($user, $text)
{
$text = '['.common_config('site', 'name') . '] ' . $text;
jabber_send_message($user->jabber, $text);
}
-
+
function set_notify(&$user, $notify)
{
$orig = clone($user);
}
}
-
class WebChannel extends Channel
{
+ var $out = null;
+
+ function __construct($out=null)
+ {
+ $this->out = $out;
+ }
function source()
{
return 'web';
}
-
+
function on($user)
{
return false;
}
-
+
function off($user)
{
return false;
# XXX: buffer all output and send it at the end
# XXX: even better, redirect to appropriate page
# depending on what command was run
- common_show_header(_('Command results'));
- common_element('p', null, $text);
- common_show_footer();
+ $this->out->startHTML();
+ $this->out->elementStart('head');
+ $this->out->element('title', null, _('Command results'));
+ $this->out->elementEnd('head');
+ $this->out->elementStart('body');
+ $this->out->element('p', array('id' => 'command_result'), $text);
+ $this->out->elementEnd('body');
+ $this->out->endHTML();
}
-
+
function error($user, $text)
{
common_user_error($text);
}
}
-
class AjaxWebChannel extends WebChannel
{
-
function output($user, $text)
{
- common_start_html('text/xml;charset=utf-8', true);
- common_element_start('head');
- common_element('title', null, _('Command results'));
- common_element_end('head');
- common_element_start('body');
- common_element('p', array('id' => 'command_result'), $text);
- common_element_end('body');
- common_element_end('html');
+ $this->out->startHTML('text/xml;charset=utf-8');
+ $this->out->elementStart('head');
+ $this->out->element('title', null, _('Command results'));
+ $this->out->elementEnd('head');
+ $this->out->elementStart('body');
+ $this->out->element('p', array('id' => 'command_result'), $text);
+ $this->out->elementEnd('body');
+ $this->out->endHTML();
}
function error($user, $text)
{
- common_start_html('text/xml;charset=utf-8', true);
- common_element_start('head');
- common_element('title', null, _('Ajax Error'));
- common_element_end('head');
- common_element_start('body');
- common_element('p', array('id' => 'error'), $text);
- common_element_end('body');
- common_element_end('html');
+ $this->out->startHTML('text/xml;charset=utf-8');
+ $this->out->elementStart('head');
+ $this->out->element('title', null, _('Ajax Error'));
+ $this->out->elementEnd('head');
+ $this->out->elementStart('body');
+ $this->out->element('p', array('id' => 'error'), $text);
+ $this->out->elementEnd('body');
+ $this->out->endHTML();
}
}
-
class MailChannel extends Channel
{
{
return 'mail';
}
-
+
function __construct($addr=null)
{
$this->addr = $addr;
}
-
+
function on($user)
{
return $this->set_notify($user, 1);
}
-
+
function off($user)
{
return $this->set_notify($user, 0);
$headers['From'] = $user->incomingemail;
$headers['To'] = $this->addr;
-
+
$headers['Subject'] = _('Command complete');
return mail_send(array($this->addr), $headers, $text);
}
-
+
function error($user, $text)
{
-
+
$headers['From'] = $user->incomingemail;
$headers['To'] = $this->addr;
-
+
$headers['Subject'] = _('Command failed');
return mail_send(array($this->addr), $headers, $text);
}
-
+
function set_notify($user, $value)
{
$orig = clone($user);
return $profile;
}
+
+ function hasOpenID()
+ {
+ $oid = new User_openid();
+
+ $oid->user_id = $this->id;
+
+ $cnt = $oid->find();
+
+ return ($cnt > 0);
+ }
}
parent::__construct($output, $indent);
}
-
/**
* For initializing members of the class.
*
'media' => 'screen, projection, tv'));
$this->comment('[if IE]><link rel="stylesheet" type="text/css" '.
'href="'.theme_path('css/ie.css', 'base').'?version='.LACONICA_VERSION.'" /><![endif]');
- $this->comment('[if IE]><link rel="stylesheet" type="text/css" '.
- 'href="'.theme_path('css/ie.css', null).'?version='.LACONICA_VERSION.'" /><![endif]');
foreach (array(6,7) as $ver) {
- if (file_exists(theme_file('ie'.$ver.'.css'))) {
+ if (file_exists(theme_file('css/ie'.$ver.'.css', 'base'))) {
// Yes, IE people should be put in jail.
$this->comment('[if lte IE '.$ver.']><link rel="stylesheet" type="text/css" '.
'href="'.theme_path('css/ie'.$ver.'.css', 'base').'?version='.LACONICA_VERSION.'" /><![endif]');
}
}
+ $this->comment('[if IE]><link rel="stylesheet" type="text/css" '.
+ 'href="'.theme_path('css/ie.css', null).'?version='.LACONICA_VERSION.'" /><![endif]');
}
/**
// does nothing by default
}
-
/**
* Show body.
*
function showBody()
{
$this->elementStart('body', array('id' => $this->trimmed('action')));
- $this->elementStart('div', 'wrap');
+ $this->elementStart('div', array('id' => 'wrap'));
$this->showHeader();
$this->showCore();
$this->showFooter();
$this->elementEnd('dd');
$this->elementEnd('dl');
}
-
+
/**
* Show site notice.
*
$this->elementStart('dl', array('id' => 'site_notice',
'class' => 'system_notice'));
$this->element('dt', null, _('Site notice'));
- $this->element('dd', null, $text);
+ $this->elementStart('dd', null);
+ $this->raw($text);
+ $this->elementEnd('dd');
$this->elementEnd('dl');
}
}
$notice_form = new NoticeForm($this);
$notice_form->show();
}
-
+
/**
* Show anonymous message.
*
/**
* Boolean understands english (yes, no, true, false)
*
- * @param string $key query key we're interested in
+ * @param string $key query key we're interested in
* @param string $def default value
*
* @return boolean interprets yes/no strings as boolean
function showBody()
{
$this->elementStart('body', array('id' => 'error'));
- $this->elementStart('div', 'wrap');
+ $this->elementStart('div', array('id' => 'wrap'));
$this->showHeader();
$this->showCore();
$this->showFooter();
* Start an Facebook ready HTML document
*
* For Facebook we don't want to actually output any headers,
- * DTD info, etc.
+ * DTD info, etc. Just Stylesheet and JavaScript links.
*
* If $type isn't specified, will attempt to do content negotiation.
*
function startHTML($type=null)
{
+ $this->showStylesheets();
+ $this->showScripts();
+
$this->elementStart('div', array('class' => 'facebook-page'));
}
function showBody()
{
- $this->elementStart('div', 'wrap');
+ $this->elementStart('div', array('id' => 'wrap'));
$this->showHeader();
$this->showCore();
$this->showFooter();
function showHead($error, $success)
{
- $this->showStylesheets();
- $this->showScripts();
if ($error) {
$this->element("h1", null, $error);
// Make this into a widget later
function showLocalNav()
{
-
$this->elementStart('ul', array('class' => 'nav'));
$this->elementStart('li', array('class' =>
$this->elementEnd('li');
$this->elementEnd('ul');
-
}
-
- /**
- * Show primary navigation.
- *
- * @return nothing
- */
- function showPrimaryNav()
- {
- // we don't want to show anything for this
- }
/**
* Show header of the page.
$this->elementStart('div', array('id' => 'header'));
$this->showLogo();
$this->showNoticeForm();
- $this->showPrimaryNav();
$this->elementEnd('div');
}
$loginmsg_part1 = _('To use the %s Facebook Application you need to login ' .
'with your username and password. Don\'t have a username yet? ');
-
$loginmsg_part2 = _(' a new account.');
$this->elementStart('dd');
$this->element('a',
array('href' => common_local_url('register')), _('Register'));
$this->text($loginmsg_part2);
+ $this->elementEnd('p');
$this->elementEnd('dd');
+
$this->elementEnd('dl');
-
$this->elementEnd('div');
-
}
function showLoginForm($msg = null)
{
- $this->elementStart('div', array('class' => 'content'));
+ $this->elementStart('div', array('id' => 'content'));
$this->element('h1', null, _('Login'));
if ($msg) {
$this->elementEnd('ul');
$this->submit('submit', _('Login'));
+ $this->elementEnd('fieldset');
$this->elementEnd('form');
$this->elementStart('p');
$this->elementEnd('p');
$this->elementEnd('div');
+ $this->elementEnd('div');
}
// Need to include inline CSS for styling the Profile box
+ $app_props = $this->facebook->api_client->Admin_getAppProperties(array('icon_url'));
+ $icon_url = $app_props['icon_url'];
+
$style = '<style>
+ .entry-title *,
+ .entry-content * {
+ font-size:14px;
+ font-family:"Lucida Sans Unicode", "Lucida Grande", sans-serif;
+ }
+ .entry-title a,
+ .entry-content a {
+ color:#002E6E;
+ }
+
.entry-title .vcard .photo {
float:left;
display:inline;
+ margin-right:11px;
+ margin-bottom:11px
}
- .entry-title .vcard .nickname {
- margin-left:5px;
- }
-
+ .entry-title {
+ margin-bottom:11px;
+ }
.entry-title p.entry-content {
display:inline;
- margin-left:5px;
+ margin-left:5px;
}
+ div.entry-content {
+ clear:both;
+ }
div.entry-content dl,
div.entry-content dt,
div.entry-content dd {
display:inline;
+ text-transform:lowercase;
}
- div.entry-content dt,
- div.entry-content dd {
- display:inline;
- margin-left:5px;
+ div.entry-content dd,
+ div.entry-content .device dt {
+ margin-left:0;
+ margin-right:5px;
}
- div.entry-content dl.timestamp dt {
+ div.entry-content dl.timestamp dt,
+ div.entry-content dl.response dt {
display:none;
}
div.entry-content dd a {
display:inline-block;
}
+
+ #facebook_laconica_app {
+ text-indent:-9999px;
+ height:16px;
+ width:16px;
+ display:block;
+ background:url('.$icon_url.') no-repeat 0 0;
+ float:right;
+ }
</style>';
$this->xw->openMemory();
- $item = new FacebookNoticeListItem($notice, $this);
+ $item = new FacebookProfileBoxNotice($notice, $this);
$item->show();
$fbml = "<fb:wide>$style " . $this->xw->outputMemory(false) . "</fb:wide>";
$content_shortened = common_shorten_links($content);
if (mb_strlen($content_shortened) > 140) {
- common_debug("Content = '$content_shortened'", __FILE__);
- common_debug("mb_strlen(\$content) = " . mb_strlen($content_shortened), __FILE__);
$this->showPage(_('That\'s too long. Max notice size is 140 chars.'));
return;
}
class FacebookNoticeList extends NoticeList
{
+
+ /**
+ * constructor
+ *
+ * @param Notice $notice stream of notices from DB_DataObject
+ */
+
+ function __construct($notice, $out=null)
+ {
+ parent::__construct($notice, $out);
+ }
+
/**
* show the list of notices
*
class FacebookNoticeListItem extends NoticeListItem
{
+
+ /**
+ * constructor
+ *
+ * Also initializes the profile attribute.
+ *
+ * @param Notice $notice The notice we'll display
+ */
+
+ function __construct($notice, $out=null)
+ {
+ parent::__construct($notice, $out);
+ }
+
/**
* recipe function for displaying a single notice in the Facebook App.
*
}
}
+
+
+class FacebookProfileBoxNotice extends FacebookNoticeListItem
+{
+
+ /**
+ * constructor
+ *
+ * Also initializes the profile attribute.
+ *
+ * @param Notice $notice The notice we'll display
+ */
+
+ function __construct($notice, $out=null)
+ {
+ parent::__construct($notice, $out);
+ }
+
+ /**
+ * Recipe function for displaying a single notice in the
+ * Facebook App's Profile
+ *
+ * @return void
+ */
+
+ function show()
+ {
+
+ $this->out->elementStart('div', 'entry-title');
+ $this->showAuthor();
+ $this->showContent();
+ $this->out->elementEnd('div');
+
+ $this->out->elementStart('div', 'entry-content');
+
+ $this->showNoticeLink();
+ $this->showNoticeSource();
+ $this->showReplyTo();
+ $this->out->elementEnd('div');
+
+ $this->showAppLink();
+
+ }
+
+ function showAppLink()
+ {
+
+ $this->facebook = getFacebook();
+
+ $app_props = $this->facebook->api_client->Admin_getAppProperties(
+ array('canvas_name', 'application_name'));
+
+ $this->app_uri = 'http://apps.facebook.com/' . $app_props['canvas_name'];
+ $this->app_name = $app_props['application_name'];
+
+ $this->out->elementStart('a', array('id' => 'facebook_laconica_app',
+ 'href' => $this->app_uri));
+ $this->out->text($this->app_name);
+ $this->out->elementEnd('a');
+ }
+
+}
'type' => 'text',
'id' => $id);
if ($value) {
- $attrs['value'] = htmlspecialchars($value);
+ $attrs['value'] = $value;
}
$this->element('input', $attrs);
if ($instructions) {
'class' => 'checkbox',
'id' => $id);
if ($value) {
- $attrs['value'] = htmlspecialchars($value);
+ $attrs['value'] = $value;
}
if ($checked) {
$attrs['checked'] = 'checked';
function showNoticeOptions()
{
- $this->out->elementStart('div', 'notice-options');
- $this->showFaveForm();
- $this->showReplyLink();
- $this->showDeleteLink();
- $this->out->elementEnd('div');
+ $user = common_current_user();
+ if ($user) {
+ $this->out->elementStart('div', 'notice-options');
+ $this->showFaveForm();
+ $this->showReplyLink();
+ $this->showDeleteLink();
+ $this->out->elementEnd('div');
+ }
}
/**
exit(1);
}
-define('NOTICES_PER_SECTION', 6);
+define('NOTICES_PER_SECTION', 5);
/**
* Base class for sections showing lists of notices
// change important settings or see private info, and
// _all_ our settings are important
common_set_returnto($this->selfUrl());
- common_redirect(common_local_url('login'));
+ $user = common_current_user();
+ if ($user->hasOpenID()) {
+ common_redirect(common_local_url('openidlogin'));
+ } else {
+ common_redirect(common_local_url('login'));
+ }
} else if ($_SERVER['REQUEST_METHOD'] == 'POST') {
$this->handlePost();
} else {
case 'grouprss':
return common_path('group/'.$args['nickname'].'/rss');
case 'groupmembers':
- return common_path('group/'.$args['nickname'].'/members');
+ return common_path('group/'.$args['nickname'].'/members' . (($args['page']) ? ('?page=' . $args['page']) : ''));
case 'grouplogo':
return common_path('group/'.$args['nickname'].'/logo');
case 'usergroups':
font-size:1em;
line-height:1.65;
position:relative;
-margin:0 auto;
-width:71.714em;
}
h1,h2,h3,h4,h5,h6 {
text-transform:uppercase;
margin-bottom:7px;
+overflow:hidden;
}
h1 {
font-size:1.4em;
#site_notice {
position:absolute;
-right:0;
-top:49px;
-float:right;
-width:300px;
+top:65px;
+right:18px;
+width:250px;
}
#page_notice {
clear:both;
#anon_notice {
float:left;
width:432px;
+width:28.052em;
padding:11px;
border-radius:7px;
-moz-border-radius:7px;
}
#wrap {
-float:left;
margin:0 auto;
width:71.714em;
+width:1003px;
+overflow:hidden;
}
#core {
}
#aside_primary {
-width:284px;
+width:280px;
float:left;
-margin-left:2px;
+margin-left:4px;
padding:18px;
border-radius:7px;
-moz-border-radius:7px;
float:left;
margin-bottom:18px;
margin-left:0;
+overflow:hidden;
}
.entity_profile dt,
#entity_statistics dt {
.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;
/* NOTICES */
#notices_primary {
float:left;
-width:644px;
+width:100%;
border-radius:7px;
-moz-border-radius:7px;
-webkit-border-radius:7px;
margin-right:11px;
}
+.fn {
+overflow:hidden;
+}
+
.notice .author .fn {
font-weight:bold;
}
.notice .entry-title {
float:left;
width:100%;
-overflow:auto;
+overflow:hidden;
}
#shownotice .notice .entry-title {
font-size:2.2em;
}
.section .notice {
-padding-top:11px;
-padding-bottom:11px;
+padding-top:7px;
+padding-bottom:7px;
+border-top:0;
}
.section .notice:first-child {
padding-top:0;
-border-top:0;
+}
+
+.section .notice .author {
+margin-right:0;
+}
+.section .notice .author .fn {
+display:none;
}
#form_settings_avatar .form_actions {
margin-bottom:0;
}
+
@import url("display.css");
@import url("../../identica/css/display.css");
-span.facebook-button { border: 2px solid #777; padding: 5px; display: block; float: left; margin-right: 20px; -moz-border-radius: 4px; border-radius:4px; -webkit-border-radius:4px; font-weight: bold; background-color:#A9BF4F; color:#fff; font-size:1.2em }
+* {
+font-size:14px;
+font-family:"Lucida Sans Unicode", "Lucida Grande", sans-serif;
+}
+
+#wrap {
+background-color:#F0F2F5;
+padding-left:18px;
+padding-right:18px;
+width:auto;
+}
+
+p,label,
+h1,h2,h3,h4,h5,h6 {
+color:#000;
+}
+
+#content {
+width:95%;
+}
+
+#site_nav_local_views a {
+background-color:#D0DFE7;
+}
+#site_nav_local_views a:hover {
+background-color:#FAFBFC;
+}
+
+span.facebook-button {
+border: 2px solid #aaa;
+padding: 3px;
+display: block;
+float: left;
+margin-right: 20px;
+-moz-border-radius: 4px;
+border-radius:4px;
+-webkit-border-radius:4px;
+font-weight: bold;
+background-color:#A9BF4F;
+color:#fff;
+font-size:1.2em
+}
span.facebook-button a { color:#fff }
+.facebook_guide {
+margin-bottom:18px;
+}
+.facebook_guide p {
+font-weight:bold;
+}
+
+
+input {
+height:auto !important;
+}
+
+#facebook-friends {
+float:left;
+width:100%;
+}
+
+#facebook-friends li {
+float:left;
+margin-right:2%;
+margin-bottom:11px;
+width:18%;
+height:115px;
+}
+#facebook-friends li a {
+float:left;
+}
+
+#add_to_profile {
+position:absolute;
+right:18px;
+top:10px;
+z-index:2;
+}
+
.notice div.entry-content dl,
.notice div.entry-content dt,
.notice div.entry-content dd {
list-style-type:none;
}
-.facebook_guide p {
-margin-bottom:18px;
-font-size:1.3em;
-font-weight:bold;
-}
-
.form_settings label {
margin-right:18px;
}
.profile {
border-top-color:#D1D9E4;
}
-.section .notice,
.section .profile {
border-top-color:#97BFD1;
}
color:#000;
}
-#form_notice #notice_data-attach_view {
-background-image:url(../images/icons/twotone/green/paper-clip.gif);
-background-repeat:no-repeat;
-background-position:0 45%;
-background-color:transparent;
-}
#nav_register a {
text-decoration:none;
}
-
-
#page_notice .error {
background-color:#F7E8E8;
}
}
-
-
#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.jpg);
+background-image:url(../../base/images/icons/icon_rss.png);
}
#export_data li a.atom {
-background-image:url(../../base/images/icons/icon_atom.jpg);
+background-image:url(../../base/images/icons/icon_atom.png);
}
#export_data li a.foaf {
background-image:url(../../base/images/icons/icon_foaf.gif);
}
-#export_data li a.export_vcard {
-background-image:url(../../base/images/icons/icon_vcard.gif);
-}
-
+.entity_edit a,
.entity_send-a-message a,
.form_user_nudge input.submit,
.form_user_block input.submit,
background-color:#97BFD1;
}
+.entity_edit a {
+background-image:url(../images/icons/twotone/green/edit.gif);
+}
.entity_send-a-message a {
background-image:url(../images/icons/twotone/green/quote.gif);
}
background-color:#fcfcfc;
}
-.notice-data a span {
-background-color:transparent;
-background-repeat:no-repeat;
-background-position:0 45%;
-}
-.notice_video .notice-data a span {
-background-image:url(../images/icons/twotone/green/camera.gif);
-}
-.notice_audio .notice-data a span {
-background-image:url(../images/icons/twotone/green/music.gif);
-}
-.notice_image .notice-data a span {
-background-image:url(../images/icons/twotone/green/search.gif);
-}
-.notice_event .notice-data a span {
-background-image:url(../images/icons/twotone/green/calendar.gif);
-}
-.notice_location .notice-data a span {
-background-image:url(../images/icons/twotone/green/flag.gif);
-}
-.notice_document .notice-data a span {
-background-image:url(../images/icons/twotone/green/document.gif);
-}
-
.notice-options .notice_reply a,
.notice-options form input.submit {
background-color:transparent;
.pagination .nav_prev a,
.pagination .nav_next a {
background-repeat:no-repeat;
+border-color:#D1D9E4;
}
.pagination .nav_prev a {
background-image:url(../images/icons/twotone/green/arrow-left.gif);
-background-position:0 45%;
+background-position:10% 45%;
}
.pagination .nav_next a {
background-image:url(../images/icons/twotone/green/arrow-right.gif);
-background-position:100% 45%;
+background-position:90% 45%;
}
--- /dev/null
+/* IE specific styles */
+
+.notice-options input.submit {
+color:#fff;
+}
+
+#site_nav_local_views a {
+background-color:#ACCCDA;
+}
+++ /dev/null
-/* CSS Document */
-/* Design & CSS by Marie-Claude Doyon http://www.marieclaudedoyon.com */
-
-html {
- background-color: #f6e5b0;
- }
-body {
- position: absolute;
- width: 100%;
- margin: 0;
- padding: 0;
- font-family: Verdana, Arial, Helvetica, sans-serif;
- font-size: 10px;
- line-height: 12px;
- min-height: 100%;
- height: 100%;
- color: #701238;
- }
-a {
- color: #d1451a;
- text-decoration: none;
- }
-a:hover {
- text-decoration: underline;
- }
-img, img a {
- border: 0;
- }
-h1 {
- font-size: 14px;
- }
-
-#wrap {
- margin: 0 auto;
- padding: 0 20px;
- width: 760px;
- background: url(bg-header.gif) repeat-x #fbf2d7;
- }
-#header {
- position: relative;
- margin: 0 auto;
- width: 600px;
- height: 216px;
- }
-#logo {
- margin-top: 9px;
- }
-p#branding {
- margin: 0;
- padding: 6px 0 3px 0;
- color: #fbf2d7;
- font-size: 21px;
- font-weight: bold;
- line-height: 27px;
- }
-p#branding a {
- color: #dab134;
- }
-
-#header h1.pagetitle {
- margin: 0;
- padding: 0;
- font-size: 15px;
- line-height: 24px;
- color: #fff6d5;
-}
-
-#header h2.sitename {
- display: none;
- margin: 0;
- padding: 0;
- color: #fff6d5;
-}
-
-abbr.published { border-bottom:0; }
-
-/* ===== Begin Navigation Styling ===== */
-
-/* ----- Navigation ------ */
-#nav {
- float: right;
- margin: 0;
- padding: 0;
- list-style-type: none;
- font-size: 12px;
- }
-#nav li {
- display: block;
- float: left;
- }
-#nav li a {
- display: block;
- padding: 9px 9px 12px 9px;
- color: #F60;
- }
-#nav li a:hover {
- text-decoration: underline;
- }
-
-/* ----- Tabs ----- */
-#nav_views {
- margin: 0 auto;
- padding: 0;
- position: absolute;
- bottom: 0;
- list-style-type: none;
- font-size: 14px;
- font-weight: bold;
- width: 600px;
- /*height: 30px;*/
- }
-#nav_views li {
- display: block;
- float: left;
- line-height: 21px;
- }
-#nav_views li a {
- display: block;
- margin: 0;
- padding: 4px 12px 3px 12px;
- color: #fff6d5;
- background-color: #d1451a;
- border-right: 1px solid #dcaa3f;
- }
-#nav_views li a:hover {
- text-decoration: none;
- }
-#nav_views li.current a, #nav_views li.current a:hover {
- color: #701238;
- background-color: #fff6d5;
- border-right: 1px solid #dcaa3f;
- }
-#nav_views li.current a:hover {
- color: #d1451a;
- }
-#nav_views li a:hover {
- color: #fff6d5;
- background-color: #701238;
- border-right: 1px solid #dcaa3f;
- }
-
-.feeds {
-clear:both;
-float:right;
-margin-top:1.25em;
-position:absolute;
-right:0;
-bottom:-30px;
-}
-.feeds * {
-line-height:1.4;
-padding:0;
-margin:0;
-font-size:12px;
-}
-
-.feeds p {
-font-weight:bold;
-display:inline;
-display:none;
-}
-.feeds ul {
-display:inline;
-}
-.feeds li {
-list-style-type:none;
-display:inline;
-margin-left:0.5em;
-}
-.feeds li a.rss,
-.feeds li a.atom {
-background:url(icon_feed.jpg) no-repeat;
-padding-top:2px;
-padding-left:20px;
-}
-.feeds li a.foaf {
-background:url(icon_foaf.gif) no-repeat;
-padding-top:2px;
-padding-left:30px;
-}
-
-form#disfavor, form.disfavor,
-form#favor, form.favor {
- float: right;
-}
-
-/*favorites*/
-input#favor, input.favor,
-input#disfavor, input.disfavor {
- background-color:#fcfff5;
- background-color:transparent;
- background-image:url(icon_heart-02.gif);
- background-repeat:no-repeat;
- cursor: pointer;
- border: 0;
- width: 16px;
- height:16px;
- text-indent:-9999px;
-}
-
-input#disfavor, input.disfavor {
- background-image:url(icon_heart-01.gif);
-}
-
-.notice_single:hover input.favor,
-.notice_single:hover input.disfavor {
- background-color:#f3f8ea;
-}
-
-/*profile_actions*/
-#profile_actions {
-padding-left:0;
-list-style-type:none;
-margin:0;
-}
-#profile_actions li {
-margin-bottom:0.5em;
-clear:both;
-}
-
-#profile_actions #profile_nudge input.submit,
-#profile_actions #profile_block input.submit,
-.profile_single form.block input.submit {
-margin:0 0 0 -3px;
-padding:0;
-background-color:transparent;
-color:#C15D42;
-font-family:Georgia,"Times New Roman",Times,serif;
-font-weight:normal;
-font-size:14px;
-text-align:left;
-float:left;
-line-height:18px;
-}
-#profile_actions #profile_nudge input.submit:hover,
-#profile_actions #profile_block input.submit:hover {
-background-color:transparent;
-color:#C15D42;
-}
-
-#wrap p#nudge_response {
-background-color:transparent;
-line-height:18px;
-font-size:14px;
-}
-#wrap #profile_nudge input.disabled {
-color:#999;
-cursor:default;
-}
-
-
-#wrap form input.disabled,
-#wrap form input.disabled:hover {
-background-color:#999;
-cursor:default;
-}
-
-/* ----- Nav Footer ----- */
-#nav_sub {
- clear: both;
- margin: 18px auto 0 auto;
- padding: 0;
- list-style-type: none;
- font-size: 11px;
- font-weight: bold;
- line-height: 21px;
- border-top: 1px solid #dec5b5;
- width: 600px;
- }
-#nav_sub li {
- display: block;
- float: left;
- }
-#nav_sub li a {
- padding: 6px 24px 6px 0;
- }
-#nav_sub li a:hover {
- text-decoration: underline;
- }
-/* ===== End Navigation Styling ===== */
-
-#content {
- clear: left;
- margin: 40px 0 45px 0;
- padding: 0 80px;
- font-family: Georgia, "Times New Roman", Times, serif;
- font-size: 14px;
- line-height: 18px;
- }
-#content h2 {
- font-family: Verdana, Arial, Helvetica, sans-serif;
- font-size: 15px;
- }
-#content label {
- font-family: Verdana, Arial, Helvetica, sans-serif;
- font-size: 12px;
- }
-.instructions p, .success, .error {
- font-weight: normal;
- margin: 36px 0 0 0;
- padding: 10px;
- font-family: Georgia, "Times New Roman", Times, serif;
- font-size: 13px;
- line-height: 15px;
- border: 1px solid #dec5b5;
- color: #fff6d5;
- }
-.instructions a, .success a, .error a {
- color: #d8e2d7;
- text-decoration: underline;
- }
-.instructions a:hover, .success a:hover, .error a:hover {
- color: #fff6d5;
- }
-.success {
- background-color: #48705b;
- }
-.error {
- background-color: #ce3728;
- }
-
-/* ----- Stream -----*/
-
-#notices {
- clear: both;
- margin: 0 auto;
- padding: 0;
- list-style-type: none;
- width: 600px;
- border-top: 1px solid #dec5b5;
- }
-#notices a:hover {
- text-decoration: underline;
- }
-.notice_single {
- clear: both;
- display: block;
- margin: 0;
- padding: 5px 5px 5px 0;
- min-height: 48px;
- font-family: Georgia, "Times New Roman", Times, serif;
- font-size: 13px;
- line-height: 16px;
- border-bottom: 1px solid #dec5b5;
- background-color:#FCFFF5;
- opacity:1;
- }
-.notice_single:hover {
- background-color: #f7ebcc;
- }
-.notice_single p {
- display: inline;
- margin: 0;
- padding: 0;
- }
-#notice_delete_form #confirmation_text {
- display: block;
- font-size: 14px;
- font-weight: bold;
- }
-
-input#submit_yes, input#submit_no {
- margin: 18px 10px 0px 0px;
- padding: 4px;
- font-weight: bold;
- color: #fff6d5;
- background-color: #F60;
- cursor: pointer;
- border: 0;
- width: 40px;
- }
-input#submit_yes:hover, input#submit_no:hover {
- background-color: #701238;
- }
-.avatar.stream {
- float: left;
- margin: 0 10px 0.5em 0;
- }
-p.time {
- display: block;
- font-family: Verdana, Arial, Helvetica, sans-serif;
- font-size: 10px;
- line-height: 15px;
- }
-p.time a {
- color: #dab134;
- }
-
-/* ----- Profile -----*/
-#profile {
- clear: left;
- margin: 0 -80px;
- padding: 10px 0 0 0;
- min-height: 170px;
- border-top: 1px solid #dec5b5;
- font-family: Georgia, "Times New Roman", Times, serif;
- margin-bottom:1em;
- float:left;
- width:750px;
- }
-#profile h1 {
- margin: 0;
- padding: 0;
- font-family: Verdana, Arial, Helvetica, sans-serif;
- font-size: 14px;
- }
-#profile h2 {
- margin: 0;
- padding: 0;
- font-family: Verdana, Arial, Helvetica, sans-serif;
- font-size: 11px;
- text-transform: uppercase;
- color: #dab134;
- }
-#profile p {
- margin: 0 10px 0 0;
- font-size: 12px;
- line-height: 14px;
- }
-#profile p.location {
- margin: 0 10px 12px 0;
- font-style: italic;
- }
-#profile p.notice_current {
- font-size: 18px;
- line-height: 21px;
- }
-#profile_avatar {
- float: left;
- margin-right: 4px;
- }
-#profile_avatar img {
- margin-bottom: 5px;
- }
-.avatar.profile {
- clear: left;
- margin: 0 10px 5px 0;
- }
-.avatar.original {
- float: left;
- margin: 0 10px 18px 0;
- }
-
-#profilesettings {
- margin-bottom:2em;
-}
-
-
-.avatar_view {
- float:left;
- margin-bottom:1em;
- margin-right:1em;
-}
-
-#avatar_preview_view {
- overflow:hidden;
- width:96px;
- height:96px;
-}
-#avatar_crop {
- margin-bottom:2em;
-}
-
-#avatar_crop,
-#avatarfile {
- clear:both;
-}
-
-a.nickname {
- font-family: Verdana, Arial, Helvetica, sans-serif;
- font-weight: bold;
- font-size: 12px;
- padding-right: 3px;
- }
-.hentry a.nickname {
- font-weight:normal;
-}
-#profile_information {
- float: left;
- position: relative;
- width: 270px;
- }
-.statistics {
- margin-top: 18px;
- }
-.statistics h2 {
- margin: 12px 0 3px 0;
- }
-dl.statistics {
- margin: 0;
- font-size: 12px;
- line-height: 14px;
- }
-.statistics dt {
- float: left;
- width: 96px;
-}
-.statistics dd {
- margin-left: 100px;
-}
-.statistics dt:after {
- content: ":";
- }
-#subscriptions {
- float: left;
- margin: 18px 0 30px 0;
- }
-#subscriptions_avatars {
- float: left;
- margin: 6px 0 0 0;
- padding: 0;
- list-style-type: none;
- width: 270px;
- }
-#subscriptions_avatars li .avatar.mini {
- float: left;
- margin: 0 3px 3px 0;
- padding: 0;
- line-height: 0;
- /* border: 1px solid #f00; */
- }
-#subscriptions_viewall {
- clear: left;
- }
-/* ----- End Profile -----*/
-
-/* ----- Begin Subscriptions & Subscribers -----*/
-
-ul.subscriptions, ul.subscribers {
- float: none;
- margin: 0;
- padding: 0;
- list-style-type: none;
- overflow: auto;
- clear:both;
- }
-ul.subscriptions li, ul.subscribers li {
- display: block;
- float: left;
- padding: 0;
- }
-/* ----- End Subscriptions & Subscribers -----*/
-
-#pagination {
- margin: 18px auto;
- width: 600px;
- }
-#nav_pagination {
- margin: 0 0 36px 0;
- padding: 0;
- float: right;
- list-style-type: none;
- font-size: 12px;
- font-weight: bold;
- }
-#nav_pagination li {
- display: block;
- float: left;
- background-color: #701238;
- }
-#nav_pagination li.before {
- margin-right: 1px;
- }
-#nav_pagination li a {
- padding: 6px 15px;
- line-height: 21px;
- background-color: #701238;
- color: #fff6d5;
- }
-#nav_pagination li a:hover {
- background-color: #3F606F;
- color: #fff6d5;
- text-decoration: none;
- }
-
-#footer {
- clear: both;
- margin: 0 auto;
- padding: 0 0 36px 0;
- width: 600px;
- border-top: 1px solid #dec5b5;
- }
-#footer p {
- margin-top: 9px;
- line-height: 12px;
- }
-#cc {
- float: left;
- margin: 3px 10px 0 0;
- }
-
-/* ===== Begin Forms Styling ===== */
-
-/* ----- Forms General Style ----- */
-form {
- margin: 0 auto;
- padding: 0;
- }
-form {
- font-family: Verdana, Arial, Helvetica, sans-serif;
- font-size: 12px;
- }
-form label {
- display: block;
- font-size: 12px;
- font-weight: bold;
- line-height: 18px;
- }
-form input {
- border: 1px solid #dec5b5;
- width: 264px;
- }
-input#submit, input.submit {
- display: block;
- margin: 18px 0;
- padding: 4px;
- font-weight: bold;
- color: #fff6d5;
- background-color: #F60;
- cursor: pointer;
- border: 0;
- width: auto;
- }
-input#submit:hover, input.submit:hover {
- background-color: #701238;
- }
-input.checkbox {
- /*width: 14px;
- height: 14px;*/
- width: auto;
- border: 0;
- }
-
-label.checkbox_label {
- display: inline;
- font-weight: normal;
-}
-
-textarea, input {
- font-family: Verdana, Arial, Helvetica, sans-serif;
- font-size: 12px;
- color: #701238;
- padding: 3px;
- }
-textarea:focus, input:focus {
- background-color: #f8ebc0;
- }
-textarea {
- width: 270px;
- border: 1px solid #D8E2D7;
- }
-.input_instructions {
- margin-top: 3px;
- display: block;
- font-size: 11px;
- line-height: 15px;
- color: #924959;
- font-family: Verdana, Arial, Helvetica, sans-serif;
- }
-
-/* ----- Status Form ----- */
-#status_form {
- height: 96px;
- /*background-color: #F00;*/
- }
-#status_form p {
- margin: 36px 0 0 0;
- padding: 0;
- }
-#status_label {
- display: block;
- clear: both;
- margin: 0;
- padding: 0 0 3px 0;
- font-size: 18px;
- font-weight: bold;
- line-height: 24px;
- color: #dab134;
- }
-#status_textarea {
- display: block;
- float: left;
- width: 463px;
- height: 35px;
- padding: 5px;
- font-family: Verdana, Arial, Helvetica, sans-serif;
- font-size: 12px;
- color: #701238;
- border: 0;
- }
-#status_submit {
- display: block;
- float: left;
- margin: 1px 0 0 4px;
- width: 63px;
- height: 45px;
- background-color: #F60;
- font-family: Verdana, Arial, Helvetica, sans-serif;
- font-weight: bold;
- font-size: 14px;
- color: #fff6d5;
- cursor: pointer;
- border: 0;
- }
-#status_submit:hover {
- background-color: #d1451a;
- }
-#counter {
- position: absolute;
- top: 140px;
- left: -64px;
- width: 50px;
- font-weight: bold;
- text-align: right;
-}
-.response_error textarea,
-.response_error .on_max {
-background-color:#fee;
-}
-
-/* ----- Subscribe Form ----- */
-#content .subscribe .submit, #content .unsubscribe .submit, #remotesubscribe .button, #remotesubscribe {
- clear: left;
- margin: 0;
- width: 96px;
- height: 27px;
- font-family: verdana, arial, helvetica, sans-serif;
- font-weight: bold;
- font-size: 10px;
- text-transform: uppercase;
- background-color: #F60;
- color: #fff6d5;
- border: 0;
- }
-#remotesubscribe {
- width: 96px;
- height: 22px;
- padding: 5px 0 0 0;
- text-align: center;
- }
-#content .subscribe .button:hover, #content .unsubscribe .button:hover {
- background-color: #904632;
- cursor: pointer;
- }
-
-a#remotesubscribe {
- display: block;
-}
-
-/* ----- Login Form -----*/
-input#license {
- width: auto;
- border: 0;
- }
-/* ----- Avatar Form -----*/
-form {
- clear: left;
-}
-
-/* ----- OpenID Form -----*/
-
-input#openid_url {
- background: url(login-bg.gif) no-repeat;
- background-color: #fff;
- background-position: 4px 50%;
- color: #000;
- padding-left: 24px;
-}
-
-/* People lists (search results, maybe subscribers) */
-
-#profiles {
- clear: both;
- margin: 0 auto;
- padding: 0;
- list-style-type: none;
- width: 600px;
- border-top: 1px solid #dec5b5;
- /*border: 1px solid #F00;*/
- }
-#profiles a:hover {
- text-decoration: underline;
- }
-
-.profile_single {
- clear: both;
- display: block;
- margin: 0;
- padding: 5px 5px 5px 0;
- min-height: 48px;
- font-family: Georgia, "Times New Roman", Times, serif;
- font-size: 13px;
- line-height: 16px;
- border-bottom: 1px solid #dec5b5;
- width:100%;
- float:left;
- }
-.profile_single:hover {
- background-color: #f7ebcc;
- }
-
-.profile_single form.block,
-.profile_single form.subscribe,
-.profile_single form.unsubscribe {
- float: right;
-}
-
-form.subedit {
- margin-left:4.5em;
-}
-form.subedit p {
- display:inline;
-
-}
-form.subedit input.submit {
- margin:0 0 0 0.5em;
- display:inline;
- background-color:transparent;
- padding:0;
- color:#C15D42;
- border:1px solid #C15D42;
-}
-
-
-
-/* ----- IM Settings Form -----*/
-
-#imsettings p {
- margin: 0;
- padding: 0;
- line-height: 15px;
-}
-
-/* ----- direct message ----- */
-
-#message_form {
- height: 96px;
- /*background-color: #F00;*/
- }
-
-#message_form p {
- margin: 21px 0 0 0;
- padding: 0;
- }
-#message_form label {
- display: inline;
- }
-
-#message_content {
- display: block;
- float: left;
- width: 463px;
- height: 35px;
- padding: 5px;
- font-family: Verdana, Arial, Helvetica, sans-serif;
- font-size: 12px;
- color: #193441;
- border: 0;
- }
-
-#message_send {
- display: block;
- float: left;
- margin: 1px 0 0 4px;
- width: 63px;
- height: 45px;
- background-color: #C15D42;
- font-family: Verdana, Arial, Helvetica, sans-serif;
- font-weight: bold;
- font-size: 14px;
- color: #FCFFF5;
- cursor: pointer;
- border: 0;
- }
-
-#message_send:hover {
- background-color: #904632;
- }
-
-/* ===== End Forms Styling ===== */
-
-/* ===== Tag Cloud Styling ===== */
-
-p.tagcloud {
-text-align: center;
-}
-
-p.tagcloud a {
-line-height:100%;
-vertical-align:middle;
-}
-
-p.tagcloud a.largest {
-font-size: 400%;
-}
-p.tagcloud a.verylarge {
-font-size: 300%;
-}
-
-p.tagcloud a.large {
-font-size: 200%;
-}
-
-p.tagcloud a.medium {
-font-size: 150%;
-}
-
-p.tagcloud a.small {
-font-size: 100%;
-}
-
-p.tagcloud a.verysmall {
-font-size: 80%;
-}
-
-p.tagcloud a.smallest {
-font-size: 60%;
-}
-
-#subscriptions_nav,
-#filter_tags {
-margin:0 0 2em 0;
-}
-
-#subscriptions_nav {
-padding-bottom:0.5em;
-/*border-bottom:1px solid #D8E2D7;*/
-float:right;
-}
-#filter_tags {
-float:left;
-}
-
-#subscriptions_nav dt,
-#filter_tags dt {
-display:none;
-}
-#subscriptions_nav dd,
-#filter_tags dd {
-margin-left:0;
-}
-#subscriptions_nav ul,
-#filter_tags ul {
-padding-left:0;
-list-style-type:none;
-margin-left:0;
-}
-#subscriptions_nav ul li {
-display:inline;
-padding-left:0.5em;
-margin-left:0.5em;
-border-left:1px solid #D8E2D7;;
-}
-#subscriptions_nav ul li.child_1 {
-border-left:0;
-padding-left:0;
-margin-left:0;
-}
-
-#filter_tags ul li {
-float:left;
-margin-left:0.5em;
-padding-left:0.5em;
-border-left:1px solid #D8E2D7;;
-}
-#filter_tags ul li.child_1 {
-margin-left:0;
-border-left:0;
-padding-left:0;
-}
-#filter_tags ul li li {
-margin-left:0;
-}
-#filter_tags ul li#filter_tags_item {
-width:30em;
-}
-#filter_tags ul li#filter_tags_item form {
-clear:none;
-}
-#filter_tags ul li#filter_tags_item label {
-margin-right:0.5em;
-font-size:14px;
-font-weight:normal;
-font-family:Georgia,"Times New Roman",Times,serif;
-}
-#filter_tags ul li#filter_tags_item label,
-#filter_tags ul li#filter_tags_item select {
-margin-top:-1px;
-margin-bottom:0.5em;
-display:inline;
-}
-#filter_tags ul li#filter_tags_item p {
-margin:0 1em 0 0;
-padding:0;
-float:left;
-}
-#filter_tags ul li .input_instructions {
-display:inline;
-display:block;
-margin:0;
-}
-#filter_tags ul li#filter_tags_item .submit {
-margin:0;
-}
-
-.tags_self,
-.tags_user {
-margin-left:4.5em;
-}
-.tags_self dl,
-.tags_user dl {
-margin-left:0;
-}
-
-.tags_self dt,
-.tags_user dt {
-display:inline;
-margin-right:0.5em;
-}
-
-.tags_self dd,
-.tags_user dd {
-margin-left:0;
-display:inline;
-}
-
-ul.tags {
-padding-left:0;
-margin-left:0;
-list-style-type:none;
-display:inline;
-}
-ul.tags li {
-display:inline;
-margin-right:0.75em;
-}
-ul.tags li a {
-padding-left:17px;
-background:url(icon_tag-01.gif) no-repeat;
-line-height:1.5;
-}
-
-.tags_user {
-margin-bottom:0.5em;
-}
-
-form#tag_user {
-margin-left:8.75em;
-clear:both;
-}
-form#tag_user p {
-margin:0;
-}
-
-form#tag_user label {
-display:inline;
-margin-right:1em;
-}
-form#tag_user .submit {
-margin-left:4em;
-}
-
-form#tag_user .input_instructions {
-margin-left:4.5em;
-}
-
-.profile_list p {
-margin:0 0 0.5em 0;
-}
-
-.profile_list .bio {
-margin-left:4.5em;
-}
-
-/* ----- Mailbox ----- */
-#messages {
- clear: both;
- margin: 0 auto;
- padding: 0;
- list-style-type: none;
- width: 600px;
- border-top: 1px solid #dec5b5;
- }
-
-#messages a:hover {
- text-decoration: underline;
- }
-
-.message_single {
- clear: both;
- display: block;
- margin: 0;
- padding: 5px 5px 5px 0;
- min-height: 48px;
- font-family: Georgia, "Times New Roman", Times, serif;
- font-size: 13px;
- line-height: 16px;
- border-bottom: 1px solid #dec5b5;
- }
-.message_single:hover {
- background-color: #f7ebcc;
- }
-.message_single p {
- display: inline;
- margin: 0;
- padding: 0;
- }
+++ /dev/null
-@charset "UTF-8";
-/* CSS Document */
-body {
- text-align: center;
-}
-input {
- height: 24px;
-}
-#wrap {
- margin: 0 auto;
- padding: 0 20px;
- width: 800px;
- text-align: left;
- background: url(bg-header.gif) repeat-x #fbf2d7;
- }
-#header {
- position: relative;
- margin-left: 108px;
- }
-#nav_views {
- margin: 0;
- }
-#nav_views li {
- line-height: 19px;
- }
-.statistics dd {
- margin-top: -15px;
- clear: both;
- }
-#notices {
- margin: 0;
- }
-.notice_single {
- height: 48px;
- }
-#profile {
- margin-left:0px;
-}
-#profile p.notice_current {
- height: 96px;
- }
-#filter_tags {
- margin-left:20px;
-}
-#content .subscriptions {
- margin-left:30px;
- width:100%;
-}
-
-#subscriptions_avatars li {
- float: left;
- margin: 0;
- padding: 0;
- }
-img.avatar.original, img.avatar.profile {
- clear: none;
- float: left;
-}
-#status_textarea {
- height: 46px;
- }
-
-#nav_pagination li a {
- padding: 6px 15px;
- line-height: 27px;
- }
-#nav_sub {
- position: relative;
- margin-left: 108px;
- }
-#footer {
- margin-left: 108px;
-}
+++ /dev/null
-@charset "UTF-8";
-/* CSS Document */
-input.disfavor,
-input.favor {
- text-indent:0;
- text-align:right;
- padding-left:25px;
-}
-
-#profile_actions li {
-float:left;
-clear:both;
-}
-#profile_actions #profile_nudge input.submit {
-margin-left:0;
-width:100px;
-}
-
-#statistics dd {
- clear: both;
- }
-
-#subscriptions_avatars li {
- float: left;
- }
-img.avatar.original, img.avatar.profile {
- clear: none;
- float: left;
-}
-
-#nav_pagination li a {
- padding: 6px 15px;
- line-height: 27px;
- }
-
-#filter_tags ul li#filter_tags_item label {
-position:relative;
-top:-8px;
-}
\ No newline at end of file
.profile {
border-top-color:#CEE1E9;
}
-.section .notice,
.section .profile {
border-top-color:#87B4C8;
}
color:#000;
}
-#form_notice #notice_data-attach_view {
-background-image:url(../images/icons/twotone/green/paper-clip.gif);
-background-repeat:no-repeat;
-background-position:0 45%;
-background-color:transparent;
-}
#nav_register a {
text-decoration:none;
}
-
-
#page_notice .error {
background-color:#F7E8E8;
}
}
-
-
#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.jpg);
+background-image:url(../../base/images/icons/icon_rss.png);
}
#export_data li a.atom {
-background-image:url(../../base/images/icons/icon_atom.jpg);
+background-image:url(../../base/images/icons/icon_atom.png);
}
#export_data li a.foaf {
background-image:url(../../base/images/icons/icon_foaf.gif);
}
-#export_data li a.export_vcard {
-background-image:url(../../base/images/icons/icon_vcard.gif);
-}
-
+.entity_edit a,
.entity_send-a-message a,
.form_user_nudge input.submit,
.form_user_block input.submit,
background-color:#87B4C8;
}
+.entity_edit a {
+background-image:url(../images/icons/twotone/green/edit.gif);
+}
.entity_send-a-message a {
background-image:url(../images/icons/twotone/green/quote.gif);
}
background-color:#fcfcfc;
}
-.notice-data a span {
-background-color:transparent;
-background-repeat:no-repeat;
-background-position:0 45%;
-}
-.notice_video .notice-data a span {
-background-image:url(../images/icons/twotone/green/camera.gif);
-}
-.notice_audio .notice-data a span {
-background-image:url(../images/icons/twotone/green/music.gif);
-}
-.notice_image .notice-data a span {
-background-image:url(../images/icons/twotone/green/search.gif);
-}
-.notice_event .notice-data a span {
-background-image:url(../images/icons/twotone/green/calendar.gif);
-}
-.notice_location .notice-data a span {
-background-image:url(../images/icons/twotone/green/flag.gif);
-}
-.notice_document .notice-data a span {
-background-image:url(../images/icons/twotone/green/document.gif);
-}
-
.notice-options .notice_reply a,
.notice-options form input.submit {
background-color:transparent;
+++ /dev/null
-/* CSS Document */
-/* Design & CSS by Marie-Claude Doyon http://www.marieclaudedoyon.com */
-
-@import url(../default/display.css);
-
-html {
- background: url(bg-body.gif) repeat-y top center #d8e2d7;
-}
-
-body {
- color: #193441;
-}
-
-a {
- color: #C15D42;
-}
-
-#wrap {
- background: url(bg-header.gif) repeat-x #FCFFF5;
-}
-
-#header h1.pagetitle {
- color: #d8e2d7;
-}
-
-#header h2.sitename {
- color: #FCFFF5;
-}
-
-#nav li a {
- color: #91AA9D;
-}
-
-#nav_views li a {
- color: #FCFFF5;
- background-color: #91AA9D;
- border-right: 1px solid #6A8787;
-}
-
-#nav_views li.current a, #nav_views li.current a:hover {
- color: #3F606F;
- background-color: #FCFFF5;
- border-right: 1px solid #6A8787;
-}
-
-#nav_views li.current a:hover {
- color: #193441;
-}
-
-#nav_views li a:hover {
- color: #FCFFF5;
- background-color: #3F606F;
- border-right: 1px solid #6A8787;
- }
-
-#nav_sub {
- border-top: 1px solid #D8E2D7;
- }
-
-.instructions p, .success, .error {
- border: 1px solid #91AA9D;
- color: #FCFFF5;
- }
-.instructions a:hover, .success a:hover, .error a:hover {
- color: #FCFFF5;
- }
-
-#notices {
- border-top: 1px solid #D8E2D7;
- }
-
-.notice_single {
- border-bottom: 1px solid #D8E2D7;
-}
-
-.notice_single:hover {
- background-color: #F3F8EA;
- }
-
-input#submit_yes, input#submit_no {
- color: #FCFFF5;
- background-color: #C15D42;
- }
-
-input#submit_yes:hover, input#submit_no:hover {
- background-color: #904632;
- }
-
-p.time a {
- color: #91AA9D;
- }
-
-#profile {
- border-top: 1px solid #D8E2D7;
- }
-
-#profile h2 {
- color: #91AA9D;
- }
-
-#nav_pagination li {
- background-color: #91AA9D;
- }
-
-#nav_pagination li a {
- background-color: #91AA9D;
- color: #FCFFF5;
- }
-
-#nav_pagination li a:hover {
- color: #FCFFF5;
- }
-
-#footer {
- border-top: 1px solid #D8E2D7;
- }
-
-form input {
- border: 1px solid #D8E2D7;
- }
-
-input#submit, input.submit {
- color: #FCFFF5;
- background-color: #C15D42;
- }
-
-input#submit:hover, input.submit:hover {
- background-color: #904632;
- }
-
-textarea, input {
- color: #193441;
- }
-
-textarea:focus, input:focus {
- background-color: #f0f6eb;
- }
-
-.input_instructions {
- color: #91aa9d;
- }
-
-#status_label {
- color: #91AA9D;
- }
-
-#status_textarea {
- color: #193441;
-}
-
-#status_submit {
- background-color: #C15D42;
- color: #FCFFF5;
- }
-
-#status_submit:hover {
- background-color: #904632;
- }
-
-#content .subscribe .submit, #content .unsubscribe .submit, #remotesubscribe .button, #remotesubscribe {
- background-color: #c15d42;
- color: #fcfff5;
- }
-
-#profiles {
- border-top: 1px solid #D8E2D7;
- }
-
-.profile_single {
- border-bottom: 1px solid #D8E2D7;
- }
-
-.profile_single:hover {
- background-color: #F3F8EA;
- }
-
-#messages {
- border-top: 1px solid #D8E2D7;
- }
-
-.message_single {
- border-bottom: 1px solid #D8E2D7;
- }
-
-.message_single:hover {
- background-color: #F3F8EA;
- }
+++ /dev/null
-@charset "UTF-8";
-/* CSS Document */
-@import url(../default/ie6.css);
-#wrap {
- background: url(bg-header.gif) repeat-x #FCFFF5;
- }
-
-
-input.disfavor,
-input.favor {
- text-indent:0px;
- text-align:right;
- padding-left:25px;
-}
\ No newline at end of file
+++ /dev/null
-@charset "UTF-8";
-/* CSS Document */
-@import url(../default/ie7.css);