summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorZach Copley <zach@status.net>2009-10-05 10:05:43 -0700
committerZach Copley <zach@status.net>2009-10-05 10:05:43 -0700
commit2b7d8d0c29a9b28700828db5184ed6d1dc7b1922 (patch)
tree3dd0b4bdbbc421b155750fa77ddd38edd058d136
parentee207ffd8be4a7178d06ff7c6928dba3714146ec (diff)
parent7a33125a6c05a885a7e4c6d80be4e0fe26499565 (diff)
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 ...
-rw-r--r--EVENTS.txt6
-rw-r--r--classes/Notice.php35
-rw-r--r--classes/Profile.php75
-rw-r--r--classes/User.php44
-rw-r--r--index.php5
-rw-r--r--install.php17
-rw-r--r--lib/action.php19
-rw-r--r--lib/htmloutputter.php16
-rw-r--r--lib/noticeform.php70
-rw-r--r--plugins/Orbited/OrbitedPlugin.php154
-rw-r--r--plugins/Orbited/orbitedextra.js2
-rw-r--r--plugins/Orbited/orbitedupdater.js24
-rw-r--r--plugins/Realtime/RealtimePlugin.php1
-rw-r--r--scripts/deleteuser.php68
-rw-r--r--theme/base/css/display.css2
-rw-r--r--theme/iphone/bg-body.gifbin136 -> 0 bytes
-rw-r--r--theme/iphone/bg-header.gifbin2469 -> 0 bytes
-rw-r--r--theme/iphone/default-avatar-mini.pngbin646 -> 0 bytes
-rw-r--r--theme/iphone/default-avatar-profile.pngbin2853 -> 0 bytes
-rw-r--r--theme/iphone/default-avatar-stream.pngbin1487 -> 0 bytes
-rw-r--r--theme/iphone/display.css698
-rw-r--r--theme/iphone/display.css.dist686
-rw-r--r--theme/iphone/ie6.css.dist63
-rw-r--r--theme/iphone/ie7.css.dist20
-rw-r--r--theme/iphone/login-bg.gifbin328 -> 0 bytes
-rw-r--r--theme/iphone/logo.pngbin818 -> 0 bytes
26 files changed, 469 insertions, 1536 deletions
diff --git a/EVENTS.txt b/EVENTS.txt
index fbb2f36a7..02b11a8a6 100644
--- a/EVENTS.txt
+++ b/EVENTS.txt
@@ -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)
diff --git a/classes/Notice.php b/classes/Notice.php
index 93d5de790..ba2227c0a 100644
--- a/classes/Notice.php
+++ b/classes/Notice.php
@@ -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);
diff --git a/classes/Profile.php b/classes/Profile.php
index 7f0d12758..4a069ee84 100644
--- a/classes/Profile.php
+++ b/classes/Profile.php
@@ -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();
+ }
}
diff --git a/classes/User.php b/classes/User.php
index 3f7ed09bb..48df0cdd7 100644
--- a/classes/User.php
+++ b/classes/User.php
@@ -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?
+ }
}
diff --git a/index.php b/index.php
index 51e30f578..644812bd5 100644
--- a/index.php
+++ b/index.php
@@ -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) {
diff --git a/install.php b/install.php
index c2a5bb29e..69f025a6a 100644
--- a/install.php
+++ b/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;
}
diff --git a/lib/action.php b/lib/action.php
index 71ceffe20..1b2f73752 100644
--- a/lib/action.php
+++ b/lib/action.php
@@ -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');
}
diff --git a/lib/htmloutputter.php b/lib/htmloutputter.php
index c70f96537..ce83295fb 100644
--- a/lib/htmloutputter.php
+++ b/lib/htmloutputter.php
@@ -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');
}
}
diff --git a/lib/noticeform.php b/lib/noticeform.php
index 186330bf1..9864d15eb 100644
--- a/lib/noticeform.php
+++ b/lib/noticeform.php
@@ -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 : '');
-
- $contentLimit = Notice::maxContent();
-
- $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 (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();
+
+ $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 (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');
}
/**
diff --git a/plugins/Orbited/OrbitedPlugin.php b/plugins/Orbited/OrbitedPlugin.php
new file mode 100644
index 000000000..ba87b266a
--- /dev/null
+++ b/plugins/Orbited/OrbitedPlugin.php
@@ -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/";
+ }
+}
diff --git a/plugins/Orbited/orbitedextra.js b/plugins/Orbited/orbitedextra.js
new file mode 100644
index 000000000..47e5c0c80
--- /dev/null
+++ b/plugins/Orbited/orbitedextra.js
@@ -0,0 +1,2 @@
+TCPSocket = Orbited.TCPSocket;
+
diff --git a/plugins/Orbited/orbitedupdater.js b/plugins/Orbited/orbitedupdater.js
new file mode 100644
index 000000000..8c5ab3b73
--- /dev/null
+++ b/plugins/Orbited/orbitedupdater.js
@@ -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);
+ }
+ }
+}();
+
diff --git a/plugins/Realtime/RealtimePlugin.php b/plugins/Realtime/RealtimePlugin.php
index 0f0d0f9f4..181927968 100644
--- a/plugins/Realtime/RealtimePlugin.php
+++ b/plugins/Realtime/RealtimePlugin.php
@@ -230,6 +230,7 @@ class RealtimePlugin extends Plugin
}
$action->showContentBlock();
+ $action->showScripts();
$action->elementEnd('body');
return false; // No default processing
}
diff --git a/scripts/deleteuser.php b/scripts/deleteuser.php
new file mode 100644
index 000000000..52389123c
--- /dev/null
+++ b/scripts/deleteuser.php
@@ -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";
diff --git a/theme/base/css/display.css b/theme/base/css/display.css
index 7706fba48..76709113f 100644
--- a/theme/base/css/display.css
+++ b/theme/base/css/display.css
@@ -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;
}
diff --git a/theme/iphone/bg-body.gif b/theme/iphone/bg-body.gif
deleted file mode 100644
index d87e2e8d7..000000000
--- a/theme/iphone/bg-body.gif
+++ /dev/null
Binary files differ
diff --git a/theme/iphone/bg-header.gif b/theme/iphone/bg-header.gif
deleted file mode 100644
index 5154b2e5e..000000000
--- a/theme/iphone/bg-header.gif
+++ /dev/null
Binary files differ
diff --git a/theme/iphone/default-avatar-mini.png b/theme/iphone/default-avatar-mini.png
deleted file mode 100644
index 38b8692b4..000000000
--- a/theme/iphone/default-avatar-mini.png
+++ /dev/null
Binary files differ
diff --git a/theme/iphone/default-avatar-profile.png b/theme/iphone/default-avatar-profile.png
deleted file mode 100644
index f8357d4fc..000000000
--- a/theme/iphone/default-avatar-profile.png
+++ /dev/null
Binary files differ
diff --git a/theme/iphone/default-avatar-stream.png b/theme/iphone/default-avatar-stream.png
deleted file mode 100644
index 6b63baa70..000000000
--- a/theme/iphone/default-avatar-stream.png
+++ /dev/null
Binary files differ
diff --git a/theme/iphone/display.css b/theme/iphone/display.css
deleted file mode 100644
index 1838a8e86..000000000
--- a/theme/iphone/display.css
+++ /dev/null
@@ -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;
-}
diff --git a/theme/iphone/display.css.dist b/theme/iphone/display.css.dist
deleted file mode 100644
index 395da2e2f..000000000
--- a/theme/iphone/display.css.dist
+++ /dev/null
@@ -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%;
-}
diff --git a/theme/iphone/ie6.css.dist b/theme/iphone/ie6.css.dist
deleted file mode 100644
index 97d9fee3f..000000000
--- a/theme/iphone/ie6.css.dist
+++ /dev/null
@@ -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;
-}
diff --git a/theme/iphone/ie7.css.dist b/theme/iphone/ie7.css.dist
deleted file mode 100644
index bbf52d5cf..000000000
--- a/theme/iphone/ie7.css.dist
+++ /dev/null
@@ -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;
- } \ No newline at end of file
diff --git a/theme/iphone/login-bg.gif b/theme/iphone/login-bg.gif
deleted file mode 100644
index e2d8377db..000000000
--- a/theme/iphone/login-bg.gif
+++ /dev/null
Binary files differ
diff --git a/theme/iphone/logo.png b/theme/iphone/logo.png
deleted file mode 100644
index 3b271814d..000000000
--- a/theme/iphone/logo.png
+++ /dev/null
Binary files differ