Merge branch '0.9.x' into refactor-api
* 0.9.x: (23 commits) Added hook to wrap the notice form data block Unnecessary selector bit Removed obsolete iphone theme (pre v0.7) remove spurious readme from Orbited need to show scripts at end of body in RealtimePlugin Some changes required from Orbited debugging Update OrbitedPlugin to work with RealtimePlugin framework updated OrbitedPlugin to use RealtimePlugin remove unused files for OrbitedPlugin rename plugin copy Comet plugin to Orbited move scripts to just before </body>, add event for scripts that need to be in <head> reformat Notice.php added all them doxygens Using CDATA for autofocus script more doxygen added doxygen indent fix better handling of y response in deleteuser.php script to permanently delete a user ...
@ -93,6 +93,12 @@ StartShowAside: Showing before the Aside container
|
||||
EndShowAside: Showing after the Aside container
|
||||
- $action: the current action
|
||||
|
||||
StartShowNoticeFormData: Showing before the notice form data
|
||||
- $action: the current action
|
||||
|
||||
EndShowNoticeFormData: Showing after the notice form data
|
||||
- $action: the current action
|
||||
|
||||
StartNoticeSave: before inserting a notice (good place for content filters)
|
||||
- $notice: notice being saved (no ID or URI)
|
||||
|
||||
|
@ -1,5 +1,5 @@
|
||||
<?php
|
||||
/*
|
||||
/**
|
||||
* StatusNet - the distributed open-source microblogging tool
|
||||
* Copyright (C) 2008, 2009, StatusNet, Inc.
|
||||
*
|
||||
@ -15,9 +15,26 @@
|
||||
*
|
||||
* You should have received a copy of the GNU Affero General Public License
|
||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*
|
||||
* @category Notices
|
||||
* @package StatusNet
|
||||
* @author Brenda Wallace <shiny@cpan.org>
|
||||
* @author Christopher Vollick <psycotica0@gmail.com>
|
||||
* @author CiaranG <ciaran@ciarang.com>
|
||||
* @author Craig Andrews <candrews@integralblue.com>
|
||||
* @author Evan Prodromou <evan@controlezvous.ca>
|
||||
* @author Gina Haeussge <osd@foosel.net>
|
||||
* @author Jeffery To <jeffery.to@gmail.com>
|
||||
* @author Mike Cochrane <mikec@mikenz.geek.nz>
|
||||
* @author Robin Millette <millette@controlyourself.ca>
|
||||
* @author Sarven Capadisli <csarven@controlyourself.ca>
|
||||
* @author Tom Adams <tom@holizz.com>
|
||||
* @license GNU Affero General Public License http://www.gnu.org/licenses/
|
||||
*/
|
||||
|
||||
if (!defined('STATUSNET') && !defined('LACONICA')) { exit(1); }
|
||||
if (!defined('STATUSNET') && !defined('LACONICA')) {
|
||||
exit(1);
|
||||
}
|
||||
|
||||
/**
|
||||
* Table Definition for notice
|
||||
@ -168,11 +185,11 @@ class Notice extends Memcached_DataObject
|
||||
|
||||
if (common_config('site', 'dupelimit') > 0 && !Notice::checkDupes($profile_id, $final)) {
|
||||
common_log(LOG_WARNING, 'Dupe posting by profile #' . $profile_id . '; throttled.');
|
||||
throw new ClientException(_('Too many duplicate messages too quickly;'.
|
||||
throw new ClientException(_('Too many duplicate messages too quickly;'.
|
||||
' take a breather and post again in a few minutes.'));
|
||||
}
|
||||
|
||||
$banned = common_config('profile', 'banned');
|
||||
$banned = common_config('profile', 'banned');
|
||||
|
||||
if ( in_array($profile_id, $banned) || in_array($profile->nickname, $banned)) {
|
||||
common_log(LOG_WARNING, "Attempted post from banned user: $profile->nickname (user id = $profile_id).");
|
||||
@ -200,12 +217,12 @@ class Notice extends Memcached_DataObject
|
||||
$notice->created = common_sql_now();
|
||||
}
|
||||
|
||||
$notice->content = $final;
|
||||
$notice->rendered = common_render_content($final, $notice);
|
||||
$notice->source = $source;
|
||||
$notice->uri = $uri;
|
||||
$notice->content = $final;
|
||||
$notice->rendered = common_render_content($final, $notice);
|
||||
$notice->source = $source;
|
||||
$notice->uri = $uri;
|
||||
|
||||
$notice->reply_to = self::getReplyTo($reply_to, $profile_id, $source, $final);
|
||||
$notice->reply_to = self::getReplyTo($reply_to, $profile_id, $source, $final);
|
||||
|
||||
if (!empty($notice->reply_to)) {
|
||||
$reply = Notice::staticGet('id', $notice->reply_to);
|
||||
|
@ -476,4 +476,79 @@ class Profile extends Memcached_DataObject
|
||||
$biolimit = self::maxBio();
|
||||
return ($biolimit > 0 && !empty($bio) && (mb_strlen($bio) > $biolimit));
|
||||
}
|
||||
|
||||
function delete()
|
||||
{
|
||||
$this->_deleteNotices();
|
||||
$this->_deleteSubscriptions();
|
||||
$this->_deleteMessages();
|
||||
$this->_deleteTags();
|
||||
$this->_deleteBlocks();
|
||||
|
||||
$related = array('Avatar',
|
||||
'Reply',
|
||||
'Group_member',
|
||||
);
|
||||
|
||||
foreach ($related as $cls) {
|
||||
$inst = new $cls();
|
||||
$inst->profile_id = $this->id;
|
||||
$inst->delete();
|
||||
}
|
||||
|
||||
parent::delete();
|
||||
}
|
||||
|
||||
function _deleteNotices()
|
||||
{
|
||||
$notice = new Notice();
|
||||
$notice->profile_id = $this->id;
|
||||
|
||||
if ($notice->find()) {
|
||||
while ($notice->fetch()) {
|
||||
$other = clone($notice);
|
||||
$other->delete();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
function _deleteSubscriptions()
|
||||
{
|
||||
$sub = new Subscription();
|
||||
$sub->subscriber = $this->id;
|
||||
$sub->delete();
|
||||
|
||||
$subd = new Subscription();
|
||||
$subd->subscribed = $this->id;
|
||||
$subd->delete();
|
||||
}
|
||||
|
||||
function _deleteMessages()
|
||||
{
|
||||
$msg = new Message();
|
||||
$msg->from_profile = $this->id;
|
||||
$msg->delete();
|
||||
|
||||
$msg = new Message();
|
||||
$msg->to_profile = $this->id;
|
||||
$msg->delete();
|
||||
}
|
||||
|
||||
function _deleteTags()
|
||||
{
|
||||
$tag = new Profile_tag();
|
||||
$tag->tagged = $this->id;
|
||||
$tag->delete();
|
||||
}
|
||||
|
||||
function _deleteBlocks()
|
||||
{
|
||||
$block = new Profile_block();
|
||||
$block->blocked = $this->id;
|
||||
$block->delete();
|
||||
|
||||
$block = new Group_block();
|
||||
$block->blocked = $this->id;
|
||||
$block->delete();
|
||||
}
|
||||
}
|
||||
|
@ -740,4 +740,48 @@ class User extends Memcached_DataObject
|
||||
}
|
||||
return $result;
|
||||
}
|
||||
|
||||
function delete()
|
||||
{
|
||||
$profile = $this->getProfile();
|
||||
$profile->delete();
|
||||
|
||||
$related = array('Fave',
|
||||
'User_openid',
|
||||
'Confirm_address',
|
||||
'Remember_me',
|
||||
'Foreign_link',
|
||||
'Invitation',
|
||||
);
|
||||
|
||||
if (common_config('inboxes', 'enabled')) {
|
||||
$related[] = 'Notice_inbox';
|
||||
}
|
||||
|
||||
foreach ($related as $cls) {
|
||||
$inst = new $cls();
|
||||
$inst->user_id = $this->id;
|
||||
$inst->delete();
|
||||
}
|
||||
|
||||
$this->_deleteTags();
|
||||
$this->_deleteBlocks();
|
||||
|
||||
parent::delete();
|
||||
}
|
||||
|
||||
function _deleteTags()
|
||||
{
|
||||
$tag = new Profile_tag();
|
||||
$tag->tagger = $this->id;
|
||||
$tag->delete();
|
||||
}
|
||||
|
||||
function _deleteBlocks()
|
||||
{
|
||||
$block = new Profile_block();
|
||||
$block->blocker = $this->id;
|
||||
$block->delete();
|
||||
// XXX delete group block? Reset blocker?
|
||||
}
|
||||
}
|
||||
|
@ -61,6 +61,11 @@ function getPath($req)
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* logs and then displays error messages
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
function handleError($error)
|
||||
{
|
||||
if ($error->getCode() == DB_DATAOBJECT_ERROR_NODATA) {
|
||||
|
17
install.php
@ -1,3 +1,4 @@
|
||||
|
||||
<?php
|
||||
/**
|
||||
* StatusNet - the distributed open-source microblogging tool
|
||||
@ -31,7 +32,7 @@
|
||||
* @author Sarven Capadisli <csarven@status.net>
|
||||
* @author Tom Adams <tom@holizz.com>
|
||||
* @license GNU Affero General Public License http://www.gnu.org/licenses/
|
||||
* @version 0.9
|
||||
* @version 0.9.x
|
||||
* @link http://status.net
|
||||
*/
|
||||
|
||||
@ -340,13 +341,13 @@ function checkExtension($name)
|
||||
if (extension_loaded($name)) {
|
||||
return true;
|
||||
} elseif (function_exists('dl') && ini_get('enable_dl') && !ini_get('safe_mode')) {
|
||||
// dl will throw a fatal error if it's disabled or we're in safe mode.
|
||||
// More fun, it may not even exist under some SAPIs in 5.3.0 or later...
|
||||
$soname = $name . '.' . PHP_SHLIB_SUFFIX;
|
||||
if (PHP_SHLIB_SUFFIX == 'dll') {
|
||||
$soname = "php_" . $soname;
|
||||
}
|
||||
return @dl($soname);
|
||||
// dl will throw a fatal error if it's disabled or we're in safe mode.
|
||||
// More fun, it may not even exist under some SAPIs in 5.3.0 or later...
|
||||
$soname = $name . '.' . PHP_SHLIB_SUFFIX;
|
||||
if (PHP_SHLIB_SUFFIX == 'dll') {
|
||||
$soname = "php_" . $soname;
|
||||
}
|
||||
return @dl($soname);
|
||||
} else {
|
||||
return false;
|
||||
}
|
||||
|
@ -120,14 +120,16 @@ class Action extends HTMLOutputter // lawsuit
|
||||
{
|
||||
// XXX: attributes (profile?)
|
||||
$this->elementStart('head');
|
||||
$this->showTitle();
|
||||
$this->showShortcutIcon();
|
||||
$this->showStylesheets();
|
||||
$this->showScripts();
|
||||
$this->showOpenSearch();
|
||||
$this->showFeeds();
|
||||
$this->showDescription();
|
||||
$this->extraHead();
|
||||
if (Event::handle('StartShowHeadElements', array($this))) {
|
||||
$this->showTitle();
|
||||
$this->showShortcutIcon();
|
||||
$this->showStylesheets();
|
||||
$this->showOpenSearch();
|
||||
$this->showFeeds();
|
||||
$this->showDescription();
|
||||
$this->extraHead();
|
||||
Event::handle('EndShowHeadElements', array($this));
|
||||
}
|
||||
$this->elementEnd('head');
|
||||
}
|
||||
|
||||
@ -352,6 +354,7 @@ class Action extends HTMLOutputter // lawsuit
|
||||
Event::handle('EndShowFooter', array($this));
|
||||
}
|
||||
$this->elementEnd('div');
|
||||
$this->showScripts();
|
||||
$this->elementEnd('body');
|
||||
}
|
||||
|
||||
|
@ -427,16 +427,12 @@ class HTMLOutputter extends XMLOutputter
|
||||
function autofocus($id)
|
||||
{
|
||||
$this->elementStart('script', array('type' => 'text/javascript'));
|
||||
$this->raw('
|
||||
<!--
|
||||
$(document).ready(function() {
|
||||
var el = $("#' . $id . '");
|
||||
if (el.length) {
|
||||
el.focus();
|
||||
}
|
||||
});
|
||||
-->
|
||||
');
|
||||
$this->raw('/*<![CDATA[*/'.
|
||||
' $(document).ready(function() {'.
|
||||
' var el = $("#' . $id . '");'.
|
||||
' if (el.length) { el.focus(); }'.
|
||||
' });'.
|
||||
' /*]]>*/');
|
||||
$this->elementEnd('script');
|
||||
}
|
||||
}
|
||||
|
@ -142,40 +142,44 @@ class NoticeForm extends Form
|
||||
|
||||
function formData()
|
||||
{
|
||||
$this->out->element('label', array('for' => 'notice_data-text'),
|
||||
sprintf(_('What\'s up, %s?'), $this->user->nickname));
|
||||
// XXX: vary by defined max size
|
||||
$this->out->element('textarea', array('id' => 'notice_data-text',
|
||||
'cols' => 35,
|
||||
'rows' => 4,
|
||||
'name' => 'status_textarea'),
|
||||
($this->content) ? $this->content : '');
|
||||
if (Event::handle('StartShowNoticeFormData', array($this))) {
|
||||
$this->out->element('label', array('for' => 'notice_data-text'),
|
||||
sprintf(_('What\'s up, %s?'), $this->user->nickname));
|
||||
// XXX: vary by defined max size
|
||||
$this->out->element('textarea', array('id' => 'notice_data-text',
|
||||
'cols' => 35,
|
||||
'rows' => 4,
|
||||
'name' => 'status_textarea'),
|
||||
($this->content) ? $this->content : '');
|
||||
|
||||
$contentLimit = Notice::maxContent();
|
||||
$contentLimit = Notice::maxContent();
|
||||
|
||||
$this->out->element('script', array('type' => 'text/javascript'),
|
||||
'maxLength = ' . $contentLimit . ';');
|
||||
$this->out->element('script', array('type' => 'text/javascript'),
|
||||
'maxLength = ' . $contentLimit . ';');
|
||||
|
||||
if ($contentLimit > 0) {
|
||||
$this->out->elementStart('dl', 'form_note');
|
||||
$this->out->element('dt', null, _('Available characters'));
|
||||
$this->out->element('dd', array('id' => 'notice_text-count'),
|
||||
$contentLimit);
|
||||
$this->out->elementEnd('dl');
|
||||
if ($contentLimit > 0) {
|
||||
$this->out->elementStart('dl', 'form_note');
|
||||
$this->out->element('dt', null, _('Available characters'));
|
||||
$this->out->element('dd', array('id' => 'notice_text-count'),
|
||||
$contentLimit);
|
||||
$this->out->elementEnd('dl');
|
||||
}
|
||||
|
||||
if (common_config('attachments', 'uploads')) {
|
||||
$this->out->element('label', array('for' => 'notice_data-attach'),_('Attach'));
|
||||
$this->out->element('input', array('id' => 'notice_data-attach',
|
||||
'type' => 'file',
|
||||
'name' => 'attach',
|
||||
'title' => _('Attach a file')));
|
||||
$this->out->hidden('MAX_FILE_SIZE', common_config('attachments', 'file_quota'));
|
||||
}
|
||||
if ($this->action) {
|
||||
$this->out->hidden('notice_return-to', $this->action, 'returnto');
|
||||
}
|
||||
$this->out->hidden('notice_in-reply-to', $this->inreplyto, 'inreplyto');
|
||||
|
||||
Event::handle('StartShowNoticeFormData', array($this));
|
||||
}
|
||||
|
||||
if (common_config('attachments', 'uploads')) {
|
||||
$this->out->element('label', array('for' => 'notice_data-attach'),_('Attach'));
|
||||
$this->out->element('input', array('id' => 'notice_data-attach',
|
||||
'type' => 'file',
|
||||
'name' => 'attach',
|
||||
'title' => _('Attach a file')));
|
||||
$this->out->hidden('MAX_FILE_SIZE', common_config('attachments', 'file_quota'));
|
||||
}
|
||||
if ($this->action) {
|
||||
$this->out->hidden('notice_return-to', $this->action, 'returnto');
|
||||
}
|
||||
$this->out->hidden('notice_in-reply-to', $this->inreplyto, 'inreplyto');
|
||||
}
|
||||
|
||||
/**
|
||||
|
154
plugins/Orbited/OrbitedPlugin.php
Normal file
@ -0,0 +1,154 @@
|
||||
<?php
|
||||
/**
|
||||
* Laconica, the distributed open-source microblogging tool
|
||||
*
|
||||
* Plugin to do "real time" updates using Orbited + STOMP
|
||||
*
|
||||
* PHP version 5
|
||||
*
|
||||
* LICENCE: This program is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU Affero General Public License as published by
|
||||
* the Free Software Foundation, either version 3 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU Affero General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Affero General Public License
|
||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*
|
||||
* @category Plugin
|
||||
* @package Laconica
|
||||
* @author Evan Prodromou <evan@controlyourself.ca>
|
||||
* @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);
|
||||
}
|
||||
|
||||
require_once INSTALLDIR.'/plugins/Realtime/RealtimePlugin.php';
|
||||
|
||||
/**
|
||||
* Plugin to do realtime updates using Orbited + STOMP
|
||||
*
|
||||
* This plugin pushes data to a STOMP server which is then served to the
|
||||
* browser by the Orbited server.
|
||||
*
|
||||
* @category Plugin
|
||||
* @package Laconica
|
||||
* @author Evan Prodromou <evan@controlyourself.ca>
|
||||
* @license http://www.fsf.org/licensing/licenses/agpl-3.0.html GNU Affero General Public License version 3.0
|
||||
* @link http://laconi.ca/
|
||||
*/
|
||||
|
||||
class OrbitedPlugin extends RealtimePlugin
|
||||
{
|
||||
public $webserver = null;
|
||||
public $webport = null;
|
||||
public $channelbase = null;
|
||||
public $stompserver = null;
|
||||
public $stompport = null;
|
||||
public $username = null;
|
||||
public $password = null;
|
||||
public $webuser = null;
|
||||
public $webpass = null;
|
||||
|
||||
protected $con = null;
|
||||
|
||||
function onStartShowHeadElements($action)
|
||||
{
|
||||
// See http://orbited.org/wiki/Deployment#Cross-SubdomainDeployment
|
||||
$action->element('script', null, ' document.domain = document.domain; ');
|
||||
}
|
||||
|
||||
function _getScripts()
|
||||
{
|
||||
$scripts = parent::_getScripts();
|
||||
|
||||
$port = (is_null($this->webport)) ? 8000 : $this->webport;
|
||||
|
||||
$server = (is_null($this->webserver)) ? common_config('site', 'server') : $this->webserver;
|
||||
|
||||
$root = 'http://'.$server.(($port == 80) ? '':':'.$port);
|
||||
|
||||
$scripts[] = $root.'/static/Orbited.js';
|
||||
$scripts[] = common_path('plugins/Orbited/orbitedextra.js');
|
||||
$scripts[] = $root.'/static/protocols/stomp/stomp.js';
|
||||
$scripts[] = common_path('plugins/Orbited/orbitedupdater.js');
|
||||
|
||||
return $scripts;
|
||||
}
|
||||
|
||||
function _updateInitialize($timeline, $user_id)
|
||||
{
|
||||
$script = parent::_updateInitialize($timeline, $user_id);
|
||||
|
||||
$server = $this->_getStompServer();
|
||||
$port = $this->_getStompPort();
|
||||
|
||||
return $script." OrbitedUpdater.init(\"$server\", $port, ".
|
||||
"\"{$timeline}\", \"{$this->webuser}\", \"{$this->webpass}\");";
|
||||
}
|
||||
|
||||
function _connect()
|
||||
{
|
||||
require_once(INSTALLDIR.'/extlib/Stomp.php');
|
||||
|
||||
$url = $this->_getStompUrl();
|
||||
|
||||
$this->con = new Stomp($url);
|
||||
|
||||
if ($this->con->connect($this->username, $this->password)) {
|
||||
$this->log(LOG_INFO, "Connected.");
|
||||
} else {
|
||||
$this->log(LOG_ERR, 'Failed to connect to queue server');
|
||||
throw new ServerException('Failed to connect to queue server');
|
||||
}
|
||||
}
|
||||
|
||||
function _publish($channel, $message)
|
||||
{
|
||||
$result = $this->con->send($channel,
|
||||
json_encode($message));
|
||||
|
||||
return $result;
|
||||
// TODO: parse and deal with result
|
||||
}
|
||||
|
||||
function _disconnect()
|
||||
{
|
||||
$this->con->disconnect();
|
||||
}
|
||||
|
||||
function _pathToChannel($path)
|
||||
{
|
||||
if (!empty($this->channelbase)) {
|
||||
array_unshift($path, $this->channelbase);
|
||||
}
|
||||
return '/' . implode('/', $path);
|
||||
}
|
||||
|
||||
function _getStompServer()
|
||||
{
|
||||
return (!is_null($this->stompserver)) ? $this->stompserver :
|
||||
(!is_null($this->webserver)) ? $this->webserver :
|
||||
common_config('site', 'server');
|
||||
}
|
||||
|
||||
function _getStompPort()
|
||||
{
|
||||
return (!is_null($this->stompport)) ? $this->stompport : 61613;
|
||||
}
|
||||
|
||||
function _getStompUrl()
|
||||
{
|
||||
$server = $this->_getStompServer();
|
||||
$port = $this->_getStompPort();
|
||||
return "tcp://$server:$port/";
|
||||
}
|
||||
}
|
2
plugins/Orbited/orbitedextra.js
Normal file
@ -0,0 +1,2 @@
|
||||
TCPSocket = Orbited.TCPSocket;
|
||||
|
24
plugins/Orbited/orbitedupdater.js
Normal file
@ -0,0 +1,24 @@
|
||||
// Update the local timeline from a Orbited server
|
||||
|
||||
var OrbitedUpdater = function()
|
||||
{
|
||||
return {
|
||||
|
||||
init: function(server, port, timeline, username, password)
|
||||
{
|
||||
// set up stomp client.
|
||||
stomp = new STOMPClient();
|
||||
|
||||
stomp.onmessageframe = function(frame) {
|
||||
RealtimeUpdate.receive(JSON.parse(frame.body));
|
||||
};
|
||||
|
||||
stomp.onconnectedframe = function() {
|
||||
stomp.subscribe(timeline);
|
||||
}
|
||||
|
||||
stomp.connect(server, port, username, password);
|
||||
}
|
||||
}
|
||||
}();
|
||||
|
@ -230,6 +230,7 @@ class RealtimePlugin extends Plugin
|
||||
}
|
||||
|
||||
$action->showContentBlock();
|
||||
$action->showScripts();
|
||||
$action->elementEnd('body');
|
||||
return false; // No default processing
|
||||
}
|
||||
|
68
scripts/deleteuser.php
Normal file
@ -0,0 +1,68 @@
|
||||
#!/usr/bin/env php
|
||||
<?php
|
||||
/*
|
||||
* StatusNet - a distributed open-source microblogging tool
|
||||
* Copyright (C) 2008, 2009, StatusNet, Inc.
|
||||
*
|
||||
* This program is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU Affero General Public License as published by
|
||||
* the Free Software Foundation, either version 3 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU Affero General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Affero General Public License
|
||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
define('INSTALLDIR', realpath(dirname(__FILE__) . '/..'));
|
||||
|
||||
$shortoptions = 'i::n::y';
|
||||
$longoptions = array('id::nickname::yes');
|
||||
|
||||
$helptext = <<<END_OF_DELETEUSER_HELP
|
||||
deleteuser.php [options]
|
||||
deletes a user from the database
|
||||
|
||||
-i --id ID of the user
|
||||
-n --nickname nickname of the user
|
||||
-y --yes do not wait for confirmation
|
||||
|
||||
END_OF_DELETEUSER_HELP;
|
||||
|
||||
require_once INSTALLDIR.'/scripts/commandline.inc';
|
||||
|
||||
if (have_option('i', 'id')) {
|
||||
$id = get_option_value('i', 'id');
|
||||
$user = User::staticGet('id', $id);
|
||||
if (empty($user)) {
|
||||
print "Can't find user with ID $id\n";
|
||||
exit(1);
|
||||
}
|
||||
} else if (have_option('n', 'nickname')) {
|
||||
$nickname = get_option_value('n', 'nickname');
|
||||
$user = User::staticGet('nickname', $nickname);
|
||||
if (empty($user)) {
|
||||
print "Can't find user with nickname '$nickname'\n";
|
||||
exit(1);
|
||||
}
|
||||
} else {
|
||||
print "You must provide either an ID or a nickname.\n";
|
||||
exit(1);
|
||||
}
|
||||
|
||||
if (!have_option('y', 'yes')) {
|
||||
print "About to PERMANENTLY delete user '{$user->nickname}' ({$user->id}). Are you sure? [y/N] ";
|
||||
$response = fgets(STDIN);
|
||||
if (strtolower(trim($response)) != 'y') {
|
||||
print "Aborting.\n";
|
||||
exit(0);
|
||||
}
|
||||
}
|
||||
|
||||
print "Deleting...";
|
||||
$user->delete();
|
||||
print "DONE.\n";
|
@ -251,7 +251,7 @@ margin-right:18px;
|
||||
margin-bottom:11px;
|
||||
margin-left:18px;
|
||||
}
|
||||
#site_nav_global_primary ul li {
|
||||
#site_nav_global_primary li {
|
||||
display:inline;
|
||||
margin-left:11px;
|
||||
}
|
||||
|
Before Width: | Height: | Size: 136 B |
Before Width: | Height: | Size: 2.4 KiB |
Before Width: | Height: | Size: 646 B |
Before Width: | Height: | Size: 2.8 KiB |
Before Width: | Height: | Size: 1.5 KiB |
@ -1,698 +0,0 @@
|
||||
/* CSS Document */
|
||||
/* Design & CSS by Marie-Claude Doyon http://www.marieclaudedoyon.com */
|
||||
/* Simplified for mobile by Ken Sheppardson http://identi.ca/kshep */
|
||||
|
||||
@import url(../../base/css/display.css);
|
||||
|
||||
html {}
|
||||
body {
|
||||
width: 100%;
|
||||
padding: 0;
|
||||
margin: 0;
|
||||
font-family: Verdana, Arial, Helvetica, sans-serif;
|
||||
font-size: 24px;
|
||||
min-height: 100%;
|
||||
height: 100%;
|
||||
color: #193441;
|
||||
}
|
||||
|
||||
a {
|
||||
color: #C15D42;
|
||||
text-decoration: none;
|
||||
}
|
||||
a:hover {
|
||||
text-decoration: underline;
|
||||
}
|
||||
img, img a {
|
||||
border: 0;
|
||||
}
|
||||
h1 {
|
||||
font-size: 1.2em;
|
||||
}
|
||||
|
||||
#wrap {
|
||||
margin: 0;
|
||||
}
|
||||
|
||||
#header {
|
||||
width: 100%;
|
||||
float: left;
|
||||
background-color: #193441;
|
||||
margin: 0 0 20px 0;
|
||||
padding: 0;
|
||||
}
|
||||
#logo {
|
||||
float: left;
|
||||
margin: 10px 0px 0px 10px;
|
||||
}
|
||||
p#branding {
|
||||
margin: 0;
|
||||
padding: 6px 0 3px 0;
|
||||
color: #fbf2d7;
|
||||
font-size: 2em;
|
||||
font-weight: bold;
|
||||
line-height: 2.5em;
|
||||
}
|
||||
p#branding a {
|
||||
color: #dab134;
|
||||
}
|
||||
|
||||
#header h1.pagetitle {
|
||||
display: none;
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
font-size: 1.2em;
|
||||
line-height: 2em;
|
||||
color: #d8e2d7;
|
||||
}
|
||||
|
||||
#header h2.sitename {
|
||||
display: none;
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
color: #FCFFF5;
|
||||
}
|
||||
|
||||
/* ===== Begin Navigation Styling ===== */
|
||||
|
||||
/* ----- Navigation ------ */
|
||||
#nav {
|
||||
float: right;
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
list-style-type: none;
|
||||
font-size: 1.2em;
|
||||
}
|
||||
#nav li {
|
||||
display: block;
|
||||
float: left;
|
||||
}
|
||||
#nav li a {
|
||||
display: block;
|
||||
padding: 9px 15px 12px 0px;
|
||||
color: #91AA9D;
|
||||
}
|
||||
#nav li a:hover {
|
||||
text-decoration: underline;
|
||||
}
|
||||
|
||||
/* ----- Tabs ----- */
|
||||
#nav_views {
|
||||
clear: both;
|
||||
float: left;
|
||||
margin: 10px 0px 0px 5px;
|
||||
padding: 0;
|
||||
bottom: 0;
|
||||
list-style-type: none;
|
||||
font-size: 1.1em;
|
||||
font-weight: bold;
|
||||
}
|
||||
#nav_views li {
|
||||
display: block;
|
||||
float: left;
|
||||
line-height: 1.3em;
|
||||
}
|
||||
#nav_views li a {
|
||||
display: block;
|
||||
margin: 0;
|
||||
padding: 4px 12px 3px 12px;
|
||||
color: #FCFFF5;
|
||||
background-color: #91AA9D;
|
||||
border-right: 1px solid #6A8787;
|
||||
}
|
||||
#nav_views li a:hover {
|
||||
text-decoration: none;
|
||||
}
|
||||
#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 Footer ----- */
|
||||
#nav_sub {
|
||||
clear: both;
|
||||
margin: 18px 10px 0 10px;
|
||||
padding: 0;
|
||||
list-style-type: none;
|
||||
font-size: 1.1em;
|
||||
font-weight: bold;
|
||||
line-height: 2em;
|
||||
border-top: 1px solid #D8E2D7;
|
||||
}
|
||||
#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: 10px;
|
||||
font-family: Georgia, "Times New Roman", Times, serif;
|
||||
font-size: 1em;
|
||||
line-height: 1.1em;
|
||||
}
|
||||
#content h2 {
|
||||
font-family: Verdana, Arial, Helvetica, sans-serif;
|
||||
font-size: 1.1em;
|
||||
}
|
||||
#content label {
|
||||
font-family: Verdana, Arial, Helvetica, sans-serif;
|
||||
font-size: 1.1em;
|
||||
}
|
||||
|
||||
.instructions {
|
||||
clear: both;
|
||||
float: left;
|
||||
margin: 5px 5px 10px 5px;
|
||||
}
|
||||
.instructions p, .success, .error {
|
||||
font-weight: normal;
|
||||
margin: 0;
|
||||
padding: 10px;
|
||||
font-family: Georgia, "Times New Roman", Times, serif;
|
||||
font-size: 1.1em;
|
||||
line-height: 1.2em;
|
||||
border: 1px solid #91AA9D;
|
||||
color: #FCFFF5;
|
||||
}
|
||||
.instructions a, .success a, .error a {
|
||||
color: #d8e2d7;
|
||||
text-decoration: underline;
|
||||
}
|
||||
.instructions a:hover, .success a:hover, .error a:hover {
|
||||
color: #FCFFF5;
|
||||
}
|
||||
.success {
|
||||
clear: both;
|
||||
float: left;
|
||||
margin: 5px 5px 10px 5px;
|
||||
background-color: #48705b;
|
||||
}
|
||||
.error {
|
||||
clear: both;
|
||||
float: left;
|
||||
margin: 5px 5px 10px 5px;
|
||||
background-color: #ce3728;
|
||||
}
|
||||
|
||||
/* ----- Stream -----*/
|
||||
|
||||
#notices {
|
||||
clear: both;
|
||||
margin: 0 auto;
|
||||
padding: 0;
|
||||
list-style-type: none;
|
||||
border-top: 1px solid #D8E2D7;
|
||||
}
|
||||
#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: 1em;
|
||||
line-height: 1.4em;
|
||||
border-bottom: 1px solid #D8E2D7;
|
||||
}
|
||||
.notice_single:hover {
|
||||
background-color: #F3F8EA;
|
||||
}
|
||||
.notice_single p {
|
||||
display: inline;
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
}
|
||||
#notice_delete_form #confirmation_text {
|
||||
display: block;
|
||||
font-size: 1.1em;
|
||||
font-weight: bold;
|
||||
}
|
||||
input#submit_yes, input#submit_no {
|
||||
margin: 18px 10px 0px 0px;
|
||||
padding: 4px;
|
||||
font-weight: bold;
|
||||
color: #FCFFF5;
|
||||
background-color: #C15D42;
|
||||
cursor: pointer;
|
||||
border: 0;
|
||||
width: 40px;
|
||||
}
|
||||
input#submit_yes:hover, input#submit_no:hover {
|
||||
background-color: #904632;
|
||||
}
|
||||
.avatar.stream {
|
||||
float: left;
|
||||
margin: 0 10px 0 0;
|
||||
}
|
||||
p.time {
|
||||
display: block;
|
||||
font-family: Verdana, Arial, Helvetica, sans-serif;
|
||||
font-size: 0.9em;
|
||||
line-height: 2em;
|
||||
}
|
||||
p.time a {
|
||||
color: #91AA9D;
|
||||
}
|
||||
|
||||
/* ----- Profile -----*/
|
||||
#profile {
|
||||
clear: both;
|
||||
float: left;
|
||||
padding: 10px 0 0 0;
|
||||
border-top: 1px solid #D8E2D7;
|
||||
font-family: Georgia, "Times New Roman", Times, serif;
|
||||
}
|
||||
#profile h1 {
|
||||
clear: both;
|
||||
float: left;
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
font-family: Verdana, Arial, Helvetica, sans-serif;
|
||||
font-size: 1.2em;
|
||||
}
|
||||
#profile h2 {
|
||||
clear: both;
|
||||
float: left;
|
||||
margin: 0;
|
||||
padding: 1em 0 0.2em 0;
|
||||
font-family: Verdana, Arial, Helvetica, sans-serif;
|
||||
font-size: 1.1em;
|
||||
text-transform: uppercase;
|
||||
color: #91AA9D;
|
||||
}
|
||||
#profile p {
|
||||
clear: both;
|
||||
float: left;
|
||||
margin: 0 10px 0 0;
|
||||
font-size: 1em;
|
||||
line-height: 1.4em;
|
||||
}
|
||||
#profile p.location {
|
||||
margin: 0 10px 12px 0;
|
||||
font-style: italic;
|
||||
}
|
||||
#profile p.notice_current {
|
||||
font-size: 1.2em;
|
||||
line-height: 1.3em;
|
||||
}
|
||||
#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;
|
||||
}
|
||||
a.nickname {
|
||||
font-family: Verdana, Arial, Helvetica, sans-serif;
|
||||
font-weight: bold;
|
||||
font-size: 1.1em;
|
||||
padding-right: 3px;
|
||||
}
|
||||
#profile_information {
|
||||
float: left;
|
||||
}
|
||||
|
||||
.statistics {
|
||||
clear: both;
|
||||
float: left;
|
||||
}
|
||||
.statistics h2 {
|
||||
clear: both;
|
||||
float: left;
|
||||
margin: 12px 0 3px 0;
|
||||
}
|
||||
dl.statistics {
|
||||
margin: 0;
|
||||
}
|
||||
.statistics dt {
|
||||
clear: left;
|
||||
float: left;
|
||||
width: 200px;
|
||||
}
|
||||
.statistics dd {
|
||||
float: left;
|
||||
}
|
||||
.statistics dt:after {
|
||||
content: ":";
|
||||
}
|
||||
#subscriptions {
|
||||
clear: both;
|
||||
float: left;
|
||||
margin: 18px 0 30px 0;
|
||||
}
|
||||
#subscriptions_avatars {
|
||||
clear: both;
|
||||
float: left;
|
||||
margin: 6px 0 0 0;
|
||||
padding: 0;
|
||||
list-style-type: none;
|
||||
}
|
||||
#subscriptions_avatars li .avatar.mini {
|
||||
float: left;
|
||||
margin: 0 3px 3px 0;
|
||||
padding: 0;
|
||||
line-height: 0;
|
||||
}
|
||||
#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;
|
||||
}
|
||||
ul.subscriptions li, ul.subscribers li {
|
||||
display: block;
|
||||
float: left;
|
||||
padding: 0;
|
||||
}
|
||||
/* ----- End Subscriptions & Subscribers -----*/
|
||||
|
||||
#pagination {
|
||||
margin: 18px auto;
|
||||
}
|
||||
#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: #91AA9D;
|
||||
}
|
||||
#nav_pagination li.before {
|
||||
margin-right: 1px;
|
||||
}
|
||||
#nav_pagination li a {
|
||||
padding: 6px 15px;
|
||||
line-height: 2em;
|
||||
background-color: #91AA9D;
|
||||
color: #FCFFF5;
|
||||
}
|
||||
#nav_pagination li a:hover {
|
||||
background-color: #3F606F;
|
||||
color: #FCFFF5;
|
||||
text-decoration: none;
|
||||
}
|
||||
|
||||
#footer {
|
||||
clear: both;
|
||||
margin: 10px;
|
||||
border-top: 1px solid #D8E2D7;
|
||||
}
|
||||
#footer p {
|
||||
font-size: 0.8em;
|
||||
margin-top: 1em;
|
||||
line-height: 1.2em;
|
||||
}
|
||||
#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: 1em;
|
||||
}
|
||||
form label {
|
||||
display: block;
|
||||
font-size: 1em;
|
||||
font-weight: bold;
|
||||
line-height: 1.5em;
|
||||
}
|
||||
form input {
|
||||
border: 1px solid #D8E2D7;
|
||||
width: 264px;
|
||||
}
|
||||
input#submit, input.submit {
|
||||
display: block;
|
||||
margin: 18px 0;
|
||||
padding: 4px;
|
||||
font-weight: bold;
|
||||
color: #FCFFF5;
|
||||
background-color: #C15D42;
|
||||
cursor: pointer;
|
||||
border: 0;
|
||||
width: auto;
|
||||
}
|
||||
input#submit:hover, input.submit:hover {
|
||||
background-color: #904632;
|
||||
}
|
||||
input.checkbox {
|
||||
width: auto;
|
||||
border: 0;
|
||||
}
|
||||
textarea, input {
|
||||
font-family: Verdana, Arial, Helvetica, sans-serif;
|
||||
font-size: 1em;
|
||||
color: #193441;
|
||||
padding: 3px;
|
||||
}
|
||||
textarea:focus, input:focus {
|
||||
background-color: #f0f6eb;
|
||||
}
|
||||
textarea {
|
||||
width: 270px;
|
||||
border: 1px solid #D8E2D7;
|
||||
}
|
||||
.input_instructions {
|
||||
margin-top: 3px;
|
||||
display: block;
|
||||
font-size: 1em;
|
||||
line-height: 1.2em;
|
||||
color: #91aa9d;
|
||||
font-family: Verdana, Arial, Helvetica, sans-serif;
|
||||
}
|
||||
|
||||
/* ----- Status Form ----- */
|
||||
#status_form {
|
||||
width: 100%;
|
||||
margin: 0px 0px 10px 5px;
|
||||
}
|
||||
#status_form p {
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
}
|
||||
#status_label {
|
||||
display: none;
|
||||
clear: both;
|
||||
margin: 0;
|
||||
padding: 0 0 3px 0;
|
||||
font-size: 1.5em;
|
||||
font-weight: bold;
|
||||
line-height: 2em;
|
||||
color: #91AA9D;
|
||||
}
|
||||
#status_textarea {
|
||||
display: block;
|
||||
float: left;
|
||||
width: 70%;
|
||||
height: 3em;
|
||||
margin: 0 0 10px 0;
|
||||
padding: 0;
|
||||
font-family: Verdana, Arial, Helvetica, sans-serif;
|
||||
font-size: 1.1em;
|
||||
color: #193441;
|
||||
border: 0;
|
||||
}
|
||||
#status_submit {
|
||||
display: block;
|
||||
float: left;
|
||||
margin: 0 0 0 4px;
|
||||
padding: 1em 10px 1em 10px;
|
||||
line-height: 1em;
|
||||
width: 10%;
|
||||
background-color: #C15D42;
|
||||
font-family: Verdana, Arial, Helvetica, sans-serif;
|
||||
font-weight: bold;
|
||||
font-size: 1em;
|
||||
color: #FCFFF5;
|
||||
cursor: pointer;
|
||||
border: 0;
|
||||
}
|
||||
#status_submit:hover {
|
||||
background-color: #904632;
|
||||
}
|
||||
#counter {
|
||||
padding: 1em .5em 1em 5px;
|
||||
color: #fff;
|
||||
clear: both;
|
||||
float: left;
|
||||
font-weight: bold;
|
||||
text-align: right;
|
||||
}
|
||||
/* ----- Subscribe Form ----- */
|
||||
#subscribe .submit, #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: 12px;
|
||||
text-transform: uppercase;
|
||||
background-color: #c15d42;
|
||||
color: #fcfff5;
|
||||
border: 0;
|
||||
}
|
||||
#remotesubscribe {
|
||||
width: 96px;
|
||||
height: 22px;
|
||||
padding: 5px 0 0 0;
|
||||
text-align: center;
|
||||
}
|
||||
#subscribe .button:hover, #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;
|
||||
border-top: 1px solid #D8E2D7;
|
||||
}
|
||||
#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: 1.2em;
|
||||
line-height: 1.4em;
|
||||
border-bottom: 1px solid #D8E2D7;
|
||||
}
|
||||
.profile_single:hover {
|
||||
background-color: #F3F8EA;
|
||||
}
|
||||
|
||||
/* ----- IM Settings Form -----*/
|
||||
|
||||
#imsettings p {
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
line-height: 1.3em;
|
||||
}
|
||||
|
||||
/* ===== End Forms Styling ===== */
|
||||
|
||||
/* ===== Tag Cloud Styling ===== */
|
||||
|
||||
p.tagcloud {
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
p.tagcloud a {
|
||||
line-height:1em;
|
||||
vertical-align:middle;
|
||||
}
|
||||
|
||||
p.tagcloud a.largest {
|
||||
font-size: 4em;
|
||||
}
|
||||
p.tagcloud a.verylarge {
|
||||
font-size: 3em;
|
||||
}
|
||||
|
||||
p.tagcloud a.large {
|
||||
font-size: 2em;
|
||||
}
|
||||
|
||||
p.tagcloud a.medium {
|
||||
font-size: 1.5em;
|
||||
}
|
||||
|
||||
p.tagcloud a.small {
|
||||
font-size: 1em;
|
||||
}
|
||||
|
||||
p.tagcloud a.verysmall {
|
||||
font-size: 80%;
|
||||
}
|
||||
|
||||
p.tagcloud a.smallest {
|
||||
font-size: 60%;
|
||||
}
|
||||
|
||||
a.replybutton {
|
||||
border: 1px solid #D8E2D7;
|
||||
padding: 0px 10px 0px 10px;
|
||||
line-height: 0.8em;
|
||||
}
|
@ -1,686 +0,0 @@
|
||||
/* CSS Document */
|
||||
/* Design & CSS by Marie-Claude Doyon http://www.marieclaudedoyon.com */
|
||||
|
||||
html {
|
||||
background: url(bg-body.gif) repeat-y top center #d8e2d7;
|
||||
}
|
||||
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: #193441;
|
||||
}
|
||||
a {
|
||||
color: #C15D42;
|
||||
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 #FCFFF5;
|
||||
}
|
||||
#header {
|
||||
position: relative;
|
||||
margin: 0 auto;
|
||||
width: 540px;
|
||||
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: #d8e2d7;
|
||||
}
|
||||
|
||||
#header h2.sitename {
|
||||
display: none;
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
color: #FCFFF5;
|
||||
}
|
||||
|
||||
/* ===== 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: #91AA9D;
|
||||
}
|
||||
#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: 540px;
|
||||
/*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: #FCFFF5;
|
||||
background-color: #91AA9D;
|
||||
border-right: 1px solid #6A8787;
|
||||
}
|
||||
#nav_views li a:hover {
|
||||
text-decoration: none;
|
||||
}
|
||||
#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 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 #D8E2D7;
|
||||
width: 540px;
|
||||
}
|
||||
#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 110px;
|
||||
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 #91AA9D;
|
||||
color: #FCFFF5;
|
||||
}
|
||||
.instructions a, .success a, .error a {
|
||||
color: #d8e2d7;
|
||||
text-decoration: underline;
|
||||
}
|
||||
.instructions a:hover, .success a:hover, .error a:hover {
|
||||
color: #FCFFF5;
|
||||
}
|
||||
.success {
|
||||
background-color: #48705b;
|
||||
}
|
||||
.error {
|
||||
background-color: #ce3728;
|
||||
}
|
||||
|
||||
|
||||
/* ----- Stream -----*/
|
||||
|
||||
#notices {
|
||||
clear: both;
|
||||
margin: 0 auto;
|
||||
padding: 0;
|
||||
list-style-type: none;
|
||||
width: 540px;
|
||||
border-top: 1px solid #D8E2D7;
|
||||
}
|
||||
#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 #D8E2D7;
|
||||
}
|
||||
.notice_single:hover {
|
||||
background-color: #F3F8EA;
|
||||
}
|
||||
.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: #FCFFF5;
|
||||
background-color: #C15D42;
|
||||
cursor: pointer;
|
||||
border: 0;
|
||||
width: 40px;
|
||||
}
|
||||
input#submit_yes:hover, input#submit_no:hover {
|
||||
background-color: #904632;
|
||||
}
|
||||
.avatar.stream {
|
||||
float: left;
|
||||
margin: 0 10px 0 0;
|
||||
}
|
||||
p.time {
|
||||
display: block;
|
||||
font-family: Verdana, Arial, Helvetica, sans-serif;
|
||||
font-size: 10px;
|
||||
line-height: 15px;
|
||||
}
|
||||
p.time a {
|
||||
color: #91AA9D;
|
||||
}
|
||||
|
||||
/* ----- Profile -----*/
|
||||
#profile {
|
||||
clear: left;
|
||||
margin: 0 -110px;
|
||||
padding: 10px 0 0 0;
|
||||
min-height: 170px;
|
||||
border-top: 1px solid #D8E2D7;
|
||||
font-family: Georgia, "Times New Roman", Times, serif;
|
||||
}
|
||||
#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: #91AA9D;
|
||||
}
|
||||
#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;
|
||||
}
|
||||
a.nickname {
|
||||
font-family: Verdana, Arial, Helvetica, sans-serif;
|
||||
font-weight: bold;
|
||||
font-size: 12px;
|
||||
padding-right: 3px;
|
||||
}
|
||||
#profile_information {
|
||||
float: left;
|
||||
position: relative;
|
||||
width: 270px;
|
||||
height: 200px;
|
||||
}
|
||||
.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;
|
||||
}
|
||||
ul.subscriptions li, ul.subscribers li {
|
||||
display: block;
|
||||
float: left;
|
||||
padding: 0;
|
||||
}
|
||||
/* ----- End Subscriptions & Subscribers -----*/
|
||||
|
||||
|
||||
|
||||
#pagination {
|
||||
margin: 18px auto;
|
||||
width: 540px;
|
||||
}
|
||||
#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: #91AA9D;
|
||||
}
|
||||
#nav_pagination li.before {
|
||||
margin-right: 1px;
|
||||
}
|
||||
#nav_pagination li a {
|
||||
padding: 6px 15px;
|
||||
line-height: 21px;
|
||||
background-color: #91AA9D;
|
||||
color: #FCFFF5;
|
||||
}
|
||||
#nav_pagination li a:hover {
|
||||
background-color: #3F606F;
|
||||
color: #FCFFF5;
|
||||
text-decoration: none;
|
||||
}
|
||||
|
||||
#footer {
|
||||
clear: both;
|
||||
margin: 0 auto;
|
||||
padding: 0 0 36px 0;
|
||||
width: 540px;
|
||||
border-top: 1px solid #D8E2D7;
|
||||
}
|
||||
#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 #D8E2D7;
|
||||
width: 264px;
|
||||
}
|
||||
input#submit, input.submit {
|
||||
display: block;
|
||||
margin: 18px 0;
|
||||
padding: 4px;
|
||||
font-weight: bold;
|
||||
color: #FCFFF5;
|
||||
background-color: #C15D42;
|
||||
cursor: pointer;
|
||||
border: 0;
|
||||
width: auto;
|
||||
}
|
||||
input#submit:hover, input.submit:hover {
|
||||
background-color: #904632;
|
||||
}
|
||||
input.checkbox {
|
||||
/*width: 14px;
|
||||
height: 14px;*/
|
||||
width: auto;
|
||||
border: 0;
|
||||
}
|
||||
textarea, input {
|
||||
font-family: Verdana, Arial, Helvetica, sans-serif;
|
||||
font-size: 12px;
|
||||
color: #193441;
|
||||
padding: 3px;
|
||||
}
|
||||
textarea:focus, input:focus {
|
||||
background-color: #f0f6eb;
|
||||
}
|
||||
textarea {
|
||||
width: 270px;
|
||||
border: 1px solid #D8E2D7;
|
||||
}
|
||||
.input_instructions {
|
||||
margin-top: 3px;
|
||||
display: block;
|
||||
font-size: 11px;
|
||||
line-height: 15px;
|
||||
color: #91aa9d;
|
||||
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: #91AA9D;
|
||||
}
|
||||
#status_textarea {
|
||||
display: block;
|
||||
float: left;
|
||||
width: 463px;
|
||||
height: 35px;
|
||||
padding: 5px;
|
||||
font-family: Verdana, Arial, Helvetica, sans-serif;
|
||||
font-size: 12px;
|
||||
color: #193441;
|
||||
border: 0;
|
||||
}
|
||||
#status_submit {
|
||||
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;
|
||||
}
|
||||
#status_submit:hover {
|
||||
background-color: #904632;
|
||||
}
|
||||
#counter {
|
||||
position: absolute;
|
||||
top: 140px;
|
||||
left: -64px;
|
||||
width: 50px;
|
||||
font-weight: bold;
|
||||
text-align: right;
|
||||
}
|
||||
/* ----- Subscribe Form ----- */
|
||||
#subscribe .submit, #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: #c15d42;
|
||||
color: #fcfff5;
|
||||
border: 0;
|
||||
}
|
||||
#remotesubscribe {
|
||||
width: 96px;
|
||||
height: 22px;
|
||||
padding: 5px 0 0 0;
|
||||
text-align: center;
|
||||
}
|
||||
#subscribe .button:hover, #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: 540px;
|
||||
border-top: 1px solid #D8E2D7;
|
||||
/*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 #D8E2D7;
|
||||
}
|
||||
.profile_single:hover {
|
||||
background-color: #F3F8EA;
|
||||
}
|
||||
|
||||
/* ----- IM Settings Form -----*/
|
||||
|
||||
#imsettings p {
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
line-height: 15px;
|
||||
}
|
||||
|
||||
/* ===== 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%;
|
||||
}
|
@ -1,63 +0,0 @@
|
||||
@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 #FCFFF5;
|
||||
}
|
||||
#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 p.notice_current {
|
||||
height: 96px;
|
||||
}
|
||||
|
||||
#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;
|
||||
}
|
@ -1,20 +0,0 @@
|
||||
@charset "UTF-8";
|
||||
/* CSS Document */
|
||||
|
||||
#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;
|
||||
}
|
Before Width: | Height: | Size: 328 B |
Before Width: | Height: | Size: 818 B |