diff --git a/EVENTS.txt b/EVENTS.txt index fbb2f36a7b..02b11a8a67 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 93d5de7908..ba2227c0a3 100644 --- a/classes/Notice.php +++ b/classes/Notice.php @@ -1,5 +1,5 @@ . + * + * @category Notices + * @package StatusNet + * @author Brenda Wallace + * @author Christopher Vollick + * @author CiaranG + * @author Craig Andrews + * @author Evan Prodromou + * @author Gina Haeussge + * @author Jeffery To + * @author Mike Cochrane + * @author Robin Millette + * @author Sarven Capadisli + * @author Tom Adams + * @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 7f0d127583..4a069ee84e 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 3f7ed09bb7..48df0cdd77 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 51e30f5782..644812bd55 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 c2a5bb29ee..69f025a6a6 100644 --- a/install.php +++ b/install.php @@ -1,3 +1,4 @@ + * @author Tom Adams * @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 71ceffe20d..1b2f737521 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 c70f965376..ce83295fb3 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(' - - '); + $this->raw('/**/'); $this->elementEnd('script'); } } diff --git a/lib/noticeform.php b/lib/noticeform.php index 186330bf1c..9864d15eb0 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 : ''); + 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'); } /** diff --git a/plugins/Orbited/OrbitedPlugin.php b/plugins/Orbited/OrbitedPlugin.php new file mode 100644 index 0000000000..ba87b266a0 --- /dev/null +++ b/plugins/Orbited/OrbitedPlugin.php @@ -0,0 +1,154 @@ +. + * + * @category Plugin + * @package Laconica + * @author Evan Prodromou + * @copyright 2009 Control Yourself, Inc. + * @license http://www.fsf.org/licensing/licenses/agpl-3.0.html GNU Affero General Public License version 3.0 + * @link http://laconi.ca/ + */ + +if (!defined('LACONICA')) { + exit(1); +} + +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 + * @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 0000000000..47e5c0c80e --- /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 0000000000..8c5ab3b732 --- /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 0f0d0f9f42..1819279686 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 0000000000..52389123c5 --- /dev/null +++ b/scripts/deleteuser.php @@ -0,0 +1,68 @@ +#!/usr/bin/env php +. + */ + +define('INSTALLDIR', realpath(dirname(__FILE__) . '/..')); + +$shortoptions = 'i::n::y'; +$longoptions = array('id::nickname::yes'); + +$helptext = <<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 7706fba484..76709113fc 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 d87e2e8d76..0000000000 Binary files a/theme/iphone/bg-body.gif and /dev/null differ diff --git a/theme/iphone/bg-header.gif b/theme/iphone/bg-header.gif deleted file mode 100644 index 5154b2e5e9..0000000000 Binary files a/theme/iphone/bg-header.gif and /dev/null differ diff --git a/theme/iphone/default-avatar-mini.png b/theme/iphone/default-avatar-mini.png deleted file mode 100644 index 38b8692b4a..0000000000 Binary files a/theme/iphone/default-avatar-mini.png and /dev/null differ diff --git a/theme/iphone/default-avatar-profile.png b/theme/iphone/default-avatar-profile.png deleted file mode 100644 index f8357d4fc2..0000000000 Binary files a/theme/iphone/default-avatar-profile.png and /dev/null differ diff --git a/theme/iphone/default-avatar-stream.png b/theme/iphone/default-avatar-stream.png deleted file mode 100644 index 6b63baa70f..0000000000 Binary files a/theme/iphone/default-avatar-stream.png and /dev/null differ diff --git a/theme/iphone/display.css b/theme/iphone/display.css deleted file mode 100644 index 1838a8e86e..0000000000 --- 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 395da2e2fe..0000000000 --- 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 97d9fee3fe..0000000000 --- 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 bbf52d5cfd..0000000000 --- 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 e2d8377db0..0000000000 Binary files a/theme/iphone/login-bg.gif and /dev/null differ diff --git a/theme/iphone/logo.png b/theme/iphone/logo.png deleted file mode 100644 index 3b271814d6..0000000000 Binary files a/theme/iphone/logo.png and /dev/null differ