[Isocial-svn] SF.net SVN: isocial: [39] public/stylesheets
Status: Pre-Alpha
Brought to you by:
aguidrevitch
From: <di...@us...> - 2008-03-05 18:37:33
|
Revision: 39 http://isocial.svn.sourceforge.net/isocial/?rev=39&view=rev Author: dim0s77 Date: 2008-03-05 10:37:38 -0800 (Wed, 05 Mar 2008) Log Message: ----------- added messaging basis Modified Paths: -------------- app/application_controller.php app/controllers/message_controller.php app/installers/message_installer.php app/locales/message/ru.php app/models/user.php app/views/message/inbox.tpl app/views/message/outbox.tpl app/views/message/send.tpl public/stylesheets/Message.css Added Paths: ----------- app/controllers/friend_controller.php app/installers/friend_installer.php app/models/friend.php app/models/message.php app/views/friend/ app/views/friend/show.tpl app/views/message/_rows.tpl app/views/message/send_successfully.tpl app/views/message/show.tpl public/images/new_message.gif public/images/nophoto_men_b.gif public/images/nophoto_men_sm.gif public/images/nophoto_women_b.gif public/images/nophoto_women_sm.gif public/images/x_to_hide.gif public/images/x_to_hide_hover.gif Modified: app/application_controller.php =================================================================== --- app/application_controller.php 2008-03-04 16:29:23 UTC (rev 38) +++ app/application_controller.php 2008-03-05 18:37:38 UTC (rev 39) @@ -3,15 +3,15 @@ require_once(AK_LIB_DIR.DS.'AkActionController.php'); /** -* This file is application-wide controller file. You can put all -* application-wide controller-related methods here. -* -* Add your application-wide methods in the class below, your controllers -* will inherit them. -* -* @package ActionController -* @subpackage Base -*/ + * This file is application-wide controller file. You can put all + * application-wide controller-related methods here. + * + * Add your application-wide methods in the class below, your controllers + * will inherit them. + * + * @package ActionController + * @subpackage Base + */ class ApplicationController extends AkActionController { @@ -66,9 +66,9 @@ function clearErrors ($field) { if ($field) { $this->_errors[$field] = array(); - } else { - $this->_errors = array(); - } + } else { + $this->_errors = array(); + } } function addError($field, $message, $comment) { @@ -78,15 +78,15 @@ } $this->_errors[$field][] = array( - $this->t($message), - $this->t($comment) - ); + $this->t($message), + $this->t($comment) + ); } // before ActionMailer gets imported this function will be used function sendMail ( $to, $template = '', $locals = array() ) { if (!$template) { - // http://trac.akelos.org/ticket/122 + // http://trac.akelos.org/ticket/122 // $template = strtolower($this->getControllerName()) . DS . "email" . DS . strtolower($this->getActionName()); $template = "email" . DS . strtolower($this->getActionName()); } @@ -160,11 +160,11 @@ function _fix_email ($value) { // eats last space !!! - if (preg_match('/(.*?)\s+(<?\S+@\S+>?)/', $value, $matches)) { - $name = $this->_to_base64_utf8($matches[1]); - $value = $name . " " . $matches[2]; - } - return $value; + if (preg_match('/(.*?)\s+(<?\S+@\S+>?)/', $value, $matches)) { + $name = $this->_to_base64_utf8($matches[1]); + $value = $name . " " . $matches[2]; + } + return $value; } function _to_base64_utf8 ($value) { @@ -172,17 +172,16 @@ } function _auto_complete_result ($items, $field, $phrase = '') { - // converting to an array $entries = array(); foreach ($items as $item) { - $entry = array(); - foreach ($item->getColumns() as $column => $details) { - $entry[$column] = $item->get($column); - } - $entries[] = $entry; - } - + $entry = array(); + foreach ($item->getColumns() as $column => $details) { + $entry[$column] = $item->get($column); + } + $entries[] = $entry; + } + return $this->javascript_macros_helper->auto_complete_result($entries, $field, $phrase); } Added: app/controllers/friend_controller.php =================================================================== --- app/controllers/friend_controller.php (rev 0) +++ app/controllers/friend_controller.php 2008-03-05 18:37:38 UTC (rev 39) @@ -0,0 +1,24 @@ +<?php + +class FriendController extends ApplicationController +{ + var $models = 'user, message'; + + function index () { + $this->redirectTo(array('action' => 'show')); + } + + function show () { + } + + function search () { + } + + function add () { + } + + function delete () { + } + +} +?> \ No newline at end of file Modified: app/controllers/message_controller.php =================================================================== --- app/controllers/message_controller.php 2008-03-04 16:29:23 UTC (rev 38) +++ app/controllers/message_controller.php 2008-03-05 18:37:38 UTC (rev 39) @@ -2,20 +2,87 @@ class MessageController extends ApplicationController { - //var $models = 'user, message'; + var $models = 'user'; function index () { $this->redirectTo(array('action' => 'inbox')); } function inbox () { + $messages = $this->current_user->inbox_message->load(); + $inbox_messages = array(); + if(!empty($messages)) { + foreach ($messages as $message_loop_key => $message) { + if (isset($inbox_messages[$message->thread_id])) { + if ($inbox_messages[$message->thread_id]->id < $message->id) { + $inbox_messages[$message->thread_id] = $message; + } + } else { + $inbox_messages[$message->thread_id] = $message; + } + } + } + $this->inbox_messages = $inbox_messages; } function outbox () { + $messages = $this->current_user->outbox_message->load(); + $outbox_messages = array(); + if(!empty($messages)) { + foreach ($messages as $message_loop_key => $message) { + if (isset($outbox_messages[$message->thread_id])) { + if ($outbox_messages[$message->thread_id]->id < $message->id) { + $outbox_messages[$message->thread_id] = $message; + } + } else { + $outbox_messages[$message->thread_id] = $message; + } + } + } + $this->outbox_messages = $outbox_messages; } function send () { + if (!empty($this->params['message'])){ + $recipient = $this->User->findFirst(array( 'id' => $this->params['message']['recipient'] )); + if ($recipient) { + $message = $this->current_user->outbox_message->build(); + $message->recipient->assign($recipient); + $message->setAttributes($this->params['message']); + if ($message->save()) { + if (!$message->thread_id) { + $message->thread_id = $message->getId(); + if ($message->save()) { + $this->redirectTo(array('action' => 'send_successfully')); + return; + } + } + $this->redirectTo(array('action' => 'send_successfully')); + return; + } + } + $this->addError('_common', 'Sending message error', 'please, try again'); + } } + + function send_successfully () { + } + function show () { + if (!empty($this->params['t'])){ + $thread = $this->Message->FindFirst(array( 'thread_id' => $this->params['t'] )); + $user_id = $this->current_user->getId(); + if ($thread->sender_id == $user_id || $thread->recipient_id == $user_id ) { + $this->recipient_id = $thread->sender_id == $user_id ? $thread->recipient_id : $thread->sender_id; + $this->messages = $this->Message->find('all', array('conditions' => array('thread_id' => $thread->getId()), + 'order' => 'created_at')); + $this->interlocutors[$user_id] = $this->current_user; + $this->interlocutors[$this->recipient_id] = $this->User->findFirst(array( 'id' => $this->recipient_id)); + return; + } + } + $this->addError('_common', 'Thread unavailable', 'Sorry, the contents of this thread are temporarily unavailable. Please check back later.'); + } + } ?> \ No newline at end of file Added: app/installers/friend_installer.php =================================================================== --- app/installers/friend_installer.php (rev 0) +++ app/installers/friend_installer.php 2008-03-05 18:37:38 UTC (rev 39) @@ -0,0 +1,27 @@ +<?php +class FriendInstaller extends AkInstaller +{ + function up_1() + { + $this->execute( + "CREATE TABLE `friends` ( + `id` int(11) NOT NULL PRIMARY KEY AUTO_INCREMENT, + `user_id` int(11) NOT NULL DEFAULT 0, + `friend_id` int(11) NOT NULL DEFAULT 0, + FOREIGN KEY (user_id) REFERENCES users(id), + FOREIGN KEY (friend_id) REFERENCES users(id), + UNIQUE forward_key (user_id, friend_id), + UNIQUE reverse_key (friend_id, user_id) + ) ENGINE=InnoDB"); + + } + + function down_1() + { + /**/ + $this->dropTable('friends'); + /**/ + } +} + +?> Modified: app/installers/message_installer.php =================================================================== --- app/installers/message_installer.php 2008-03-04 16:29:23 UTC (rev 38) +++ app/installers/message_installer.php 2008-03-05 18:37:38 UTC (rev 39) @@ -8,11 +8,13 @@ `id` int(11) NOT NULL PRIMARY KEY AUTO_INCREMENT, `sender_id` int(11) NOT NULL DEFAULT 0, `recipient_id` int(11) NOT NULL DEFAULT 0, + `thread_id` int(11) NOT NULL DEFAULT 0, `subject` char(255) NOT NULL DEFAULT '', `body` text NOT NULL DEFAULT '', `created_at` datetime NOT NULL, - `updated_at` datetime NOT NULL, - `read` tinyint(1) NOT NULL DEFAULT '0' + `is_read` tinyint(1) NOT NULL DEFAULT '0', + FOREIGN KEY (sender_id) REFERENCES users(id), + FOREIGN KEY (recipient_id) REFERENCES users(id) ) ENGINE=InnoDB"); } Modified: app/locales/message/ru.php =================================================================== --- app/locales/message/ru.php 2008-03-04 16:29:23 UTC (rev 38) +++ app/locales/message/ru.php 2008-03-05 18:37:38 UTC (rev 39) @@ -13,13 +13,19 @@ $dictionary['Send'] = 'Послать'; $dictionary['Cancel'] = 'Отмена'; $dictionary['Select'] = 'Выбрать'; -$dictionary['None'] = 'Ничего'; -$dictionary['Read'] = 'Прочтенные'; -$dictionary['Unread'] = 'Непрочтенные'; -$dictionary['All'] = 'Все'; -$dictionary['Mark as Unread'] = 'Отметить как непрочтенные'; -$dictionary['Mark as Read'] = 'Отметить как прочтенные'; +$dictionary['None'] = 'ничего'; +$dictionary['Read'] = 'прочтенные'; +$dictionary['Unread'] = 'непрочтенные'; +$dictionary['All'] = 'все'; +$dictionary['Mark as'] = 'Отметить как'; $dictionary['Delete'] = 'Удалить'; +$dictionary['Message successfully sended'] = 'Сообщение отправлено'; +$dictionary['Thread unavailable'] = 'Нить сообщений недоступна'; +$dictionary['Sorry, the contents of this thread are temporarily unavailable. Please check back later.'] = 'К сожалению, содержание этой нити сообщений временно недоступно. Повторите попытку позже.'; +$dictionary['Between'] = 'в беседе участвуют:'; +$dictionary['You'] = 'Вы'; +$dictionary['and'] = 'и'; +$dictionary['Reply'] = 'Ответ'; +$dictionary['Back to'] = 'Обратно во'; - ?> Added: app/models/friend.php =================================================================== --- app/models/friend.php (rev 0) +++ app/models/friend.php 2008-03-05 18:37:38 UTC (rev 39) @@ -0,0 +1,7 @@ +<?php + +class Friend extends ActiveRecord +{ +} + +?> \ No newline at end of file Added: app/models/message.php =================================================================== --- app/models/message.php (rev 0) +++ app/models/message.php 2008-03-05 18:37:38 UTC (rev 39) @@ -0,0 +1,10 @@ +<?php + +class Message extends ActiveRecord +{ + var $belongs_to = array('sender' => array('class_name' => 'User', 'primary_key_name' => 'sender_id'), + 'recipient' => array('class_name' => 'User', 'primary_key_name' => 'recipient_id')); + +} + +?> Modified: app/models/user.php =================================================================== --- app/models/user.php 2008-03-04 16:29:23 UTC (rev 38) +++ app/models/user.php 2008-03-05 18:37:38 UTC (rev 39) @@ -2,6 +2,10 @@ class User extends ActiveRecord { + var $has_many = array('outbox_messages' => array('class_name' => 'Message', 'order' => 'created_at desc', 'foreign_key' => 'sender_id'), + 'inbox_messages' => array('class_name' => 'Message', 'order' => 'created_at desc', 'foreign_key' => 'recipient_id'), + ); + function login($email, $password) { return $this->findFirst(array( 'email' => $email, 'password' => md5($password) )); } @@ -43,6 +47,21 @@ unset($this->password_confirmation); } + function getFriends () + { + return $this->findBySql(array( + "SELECT users.* FROM users + INNER JOIN friends + ON friends.user_id = ? AND + friends.friend_id = users.id + UNION + SELECT users.* FROM users + INNER JOIN friends + ON friends.friend_id = ? AND + friends.user_id = users.id", + $this->getId(), $this->getId())); + } + } ?> Added: app/views/friend/show.tpl =================================================================== --- app/views/friend/show.tpl (rev 0) +++ app/views/friend/show.tpl 2008-03-05 18:37:38 UTC (rev 39) @@ -0,0 +1,3 @@ +show all friends +<? $friends = $current_user->getFriends() ?> +{friends} \ No newline at end of file Added: app/views/message/_rows.tpl =================================================================== --- app/views/message/_rows.tpl (rev 0) +++ app/views/message/_rows.tpl 2008-03-05 18:37:38 UTC (rev 39) @@ -0,0 +1,33 @@ +<table class="message_row"> +<tbody> +{loop messages} +<tr><? $sender = $message->$target->load() ?> + <td class="msg_icon"> </td> + <td class="checkbox"><input onclick="" type="checkbox"></td> + <td class="profile_photo"><a href=""><img src="/images/nophoto_men_sm.gif" alt="" class=""></a></td> + <td class="name_and_datetime"> + <span class="name"><a href="">{sender.name?}</a></span> + <span class="datetime">{message.created_at?}</span> + </td> + <td class="msg"> + <div class="wrapper"> + <a href="/message/show?t={message.thread_id?}" class="subject">{message.subject?}</a> + <div class="body_wrap"> + <? (utf8_strlen($message->body) > 50) ? $msg_body = utf8_substr($message->body, 0, 50) . " [..]" : $msg_body = $message->body; ?> + <a href="/message/show?t={message.thread_id?}" class="body">{msg_body?}</a> + </div> + </div> + </td> + <td class="delete_msg"> + <a href="#" onclick=""> </a> + </td> +</tr> +{else} +<div class="no_messages">_{You currently don't have any messages}.<br><br> + <img src="/images/icons/message.gif" alt="" class=""> <a href="/message/send">_{Send Message}.</a> +</div> +{end} +</tbody> +</table> + +<div class="inbox_footer"><div class="mailbox_size">1 Message Threads</div></div> Modified: app/views/message/inbox.tpl =================================================================== --- app/views/message/inbox.tpl 2008-03-04 16:29:23 UTC (rev 38) +++ app/views/message/inbox.tpl 2008-03-05 18:37:38 UTC (rev 39) @@ -14,12 +14,15 @@ </div> <div class="menu_block"> <ul id="inbox_action" class="buttons"> - <li class="disabled"><a href="#" onclick="" id="unread">_{Mark as Unread}</a></li> - <li class="disabled"><a href="#" onclick="" id="read">_{Mark as Read}</a></li> + <li class="disabled"><a>_{Mark as}:</a></li> + <li class="disabled"><a href="#" onclick="" id="unread">_{Unread},</a></li> + <li class="disabled"><a href="#" onclick="" id="read">_{Read};</a></li> <li class="disabled"><a href="#" onclick="" id="delete">_{Delete}</a></li> </ul> </div> </div> -<div class="no_messages">_{You currently don't have any messages}.<br><br> - <img src="/images/icons/message.gif" alt="" class=""> <a href="/message/send">_{Send Message}.</a> -</div> + +<?= $controller->render(array('partial' => 'rows', + 'locals' => array('messages' => $inbox_messages, + 'target' => 'sender'))) ?> + Modified: app/views/message/outbox.tpl =================================================================== --- app/views/message/outbox.tpl 2008-03-04 16:29:23 UTC (rev 38) +++ app/views/message/outbox.tpl 2008-03-05 18:37:38 UTC (rev 39) @@ -4,7 +4,7 @@ <div class="menu_block selector"> <label for="action_select">_{Select}: <select class="" onchange="" id="action_select" name="action_selector"> - <option selected="selected" value="_">---</option> + <option selected="selected" value="_">---------</option> <option value="">_{None}</option> <option value="read">_{Read}</option> <option value="unread">_{Unread}</option> @@ -18,6 +18,8 @@ </ul> </div> </div> -<div class="no_messages">_{You currently don't have any messages}.<br><br> - <img src="/images/icons/message.gif" alt="" class=""> <a href="/message/send">_{Send Message}.</a> -</div> + +<?= $controller->render(array('partial' => 'rows', + 'locals' => array('messages' => $outbox_messages, + 'target' => 'recipient'))) ?> + Modified: app/views/message/send.tpl =================================================================== --- app/views/message/send.tpl 2008-03-04 16:29:23 UTC (rev 38) +++ app/views/message/send.tpl 2008-03-05 18:37:38 UTC (rev 39) @@ -6,7 +6,10 @@ <div class="editform"> <div class="formrow"> <label>_{To}:</label> - <?= $form_helper->text_field('message', '', array('class' => 'textinput') )?> + <?= $form_options_helper->select('message', + 'recipient', + $User->collect($current_user->getFriends(), 'name', 'id'), + array('class' => 'textinput') ); ?> </div> <div class="formrow"> <label>_{Subject}:</label> @@ -14,10 +17,10 @@ </div> <div class="formrow"> <label>_{Message}:</label> - <textarea id="message" name="message" class="textinput"></textarea> + <?= $form_helper->text_area('message', 'body', array('class' => 'textinput'))?> </div> <div class="formrow"> - <label></label> + <label><?= $form_helper->hidden_field('message', 'thread_id') ?></label> <input class="submitinput" type="submit" value="_{Send}"> <input class="cancelinput" type="button" value="_{Cancel}"> </div> Added: app/views/message/send_successfully.tpl =================================================================== --- app/views/message/send_successfully.tpl (rev 0) +++ app/views/message/send_successfully.tpl 2008-03-05 18:37:38 UTC (rev 39) @@ -0,0 +1,3 @@ +<?= $controller->renderPartial("menu") ?> + +<p>_{Message successfully sended}</p> \ No newline at end of file Added: app/views/message/show.tpl =================================================================== --- app/views/message/show.tpl (rev 0) +++ app/views/message/show.tpl 2008-03-05 18:37:38 UTC (rev 39) @@ -0,0 +1,47 @@ +<?= $controller->renderPartial("menu") ?> + +<?= $controller->renderErrors() ?> + +<div class="messages_thread"> + <div class="thread_head"> + <h2 class="subject">{messages-0.subject} + <div class="interlocutors">_{Between} + <a href="">_{You}</a> _{and} + <a href=""><? $recipient = $interlocutors[$recipient_id] ?>{recipient.name}</a></div> + </h2> + </div> + <hr width="600px"> +{loop messages} + <? $interlocutor = $interlocutors[$message->sender_id] ?> + <div class="message" id="msg{message_loop_counter}"> + <div class="column author_picture"><a href=""><img src="/images/nophoto_men_sm.gif" alt="" class=""></a></div> + <div class="column author_info"> + <div class="name"><a href="">{interlocutor.name?}</a></div> + <div class="date">{message.created_at?}</div> + <div class="extras"></div> + </div> + <div class="column body"> + <div class="text">{message.body?}</div> + </div> + </div> + <div class="msg_divide_btm"> </div> +{end} + + <div class="reply_container"> + <form action="/message/send" method="post"> + <div class="row"><label>_{Reply}:</label></div> + <div class="row"><?= $form_helper->text_area('message', 'body', array('class' => 'textinput'))?></div> + <input id="message_recipient" name="message[recipient]" type="hidden" value="{recipient_id}" /> + <input id="message_thread_id" name="message[thread_id]" type="hidden" value="{message.thread_id}" /> + <input id="message_subject" name="message[subject]" type="hidden" value="re: {message.subject}" /> + <div class="msg_divide_btm"> </div> + <div class="row"> + <div class="submits"> + <input class="submitinput" type="submit" value="_{Send}"> + <input class="cancelinput" type="button" value="_{Back to} _{Inbox}" onclick=""> + </div> + <div class="sub_controls"><a href="#" onclick="">_{Delete}</a></div> + </form> + </div> + +</div> Added: public/images/new_message.gif =================================================================== (Binary files differ) Property changes on: public/images/new_message.gif ___________________________________________________________________ Name: svn:mime-type + application/octet-stream Added: public/images/nophoto_men_b.gif =================================================================== (Binary files differ) Property changes on: public/images/nophoto_men_b.gif ___________________________________________________________________ Name: svn:mime-type + application/octet-stream Added: public/images/nophoto_men_sm.gif =================================================================== (Binary files differ) Property changes on: public/images/nophoto_men_sm.gif ___________________________________________________________________ Name: svn:mime-type + application/octet-stream Added: public/images/nophoto_women_b.gif =================================================================== (Binary files differ) Property changes on: public/images/nophoto_women_b.gif ___________________________________________________________________ Name: svn:mime-type + application/octet-stream Added: public/images/nophoto_women_sm.gif =================================================================== (Binary files differ) Property changes on: public/images/nophoto_women_sm.gif ___________________________________________________________________ Name: svn:mime-type + application/octet-stream Added: public/images/x_to_hide.gif =================================================================== (Binary files differ) Property changes on: public/images/x_to_hide.gif ___________________________________________________________________ Name: svn:mime-type + application/octet-stream Added: public/images/x_to_hide_hover.gif =================================================================== (Binary files differ) Property changes on: public/images/x_to_hide_hover.gif ___________________________________________________________________ Name: svn:mime-type + application/octet-stream Modified: public/stylesheets/Message.css =================================================================== --- public/stylesheets/Message.css 2008-03-04 16:29:23 UTC (rev 38) +++ public/stylesheets/Message.css 2008-03-05 18:37:38 UTC (rev 39) @@ -1,12 +1,294 @@ -#content .inbox_submenu { background:#f7f7f7; border-bottom:1px solid #ccc; padding: 8px 20px 28px; } -.inbox_submenu .menu_block { float:left; } -.inbox_submenu .menu_block.selector { padding-right:5px; } -.inbox_submenu .menu_block.selector select { margin-left:5px; } -.inbox_submenu .buttons { list-style:none; margin:0px; padding:0px; } -.inbox_submenu .buttons li { float:left; } -.inbox_submenu .buttons li a { padding:4px 5px 4px 5px; display:block; } -.inbox_submenu .disabled a { color:#aaa; } -.inbox_submenu .disabled a:hover { cursor:default; text-decoration:none; } +#content .inbox_submenu { + background: #f7f7f7; + border-bottom: 1px solid #ccc; + padding: 8px 20px 28px 20px; +} -.no_messages { color:#666; font-size:13px; padding:100px 0px 110px 0px; text-align:center; } -.no_messages strong { color:#333; font-weight:bold; } +.inbox_submenu .menu_block { + float: left; +} + +.inbox_submenu .menu_block.selector { + padding-right: 5px; +} + +.inbox_submenu .menu_block.selector select { + margin-left: 5px; +} + +.inbox_submenu .buttons { + list-style: none; + margin: 0px; + padding: 0px; +} + +.inbox_submenu .buttons li { + float: left; +} + +.inbox_submenu .buttons li a { + padding: 4px 5px 4px 5px; + display: block; +} + +.inbox_submenu .disabled a { + color: #aaaaaa; +} + +.inbox_submenu .disabled a:hover { + cursor: default; + text-decoration: none; +} + +.no_messages { + color: #666666; + font-size: 13px; + padding: 100px 0px 110px 0px; + text-align: center; +} + +.no_messages strong { + color: #333333; + font-weight: bold; +} + +.message_row { + border-collapse: collapse; + width: 100%; +} + +.message_row tr td { + border-bottom: 1px solid #e1e1e1; + padding: 5px 0px 5px 0px; + vertical-align: middle; +} + +.message_row .msg_icon a, .message_row .msg_icon span { + display: block; + margin-top: 1px; + width: 17px; + height: 14px; + padding-left: 10px; + text-decoration: none; +} + +.message_row .checkbox { + width: 25px; +} + +.message_row .profile_photo { + width: 60px; + line-height: 1px; +} + +.message_row .name_and_datetime .name { + display: block; + width: 130px; + margin-right: 20px; + word-wrap: break-word; + text-overflow: ellipsis; +} + +.name_and_datetime .datetime { + display: block; + padding: 1px 0px 0px 0px; + font-size: 9px; + color: #777777; +} + +.name_and_datetime .unread_name { + font-weight: bold; +} + +.message_row .msg { + margin-right: 10px; + line-height: 14px; +} + +.message_row .msg .wrapper { + width: 350px; + padding: 2px 0px 2px 0px; + display: block; + text-overflow: ellipsis; +} + +.message_row .msg a { + margin-right: 5px; +} + +.message_row .msg .subject { + padding: 2px 0px 3px 22px; + background-position: 0px 1px 0px 1px; + background-repeat: no-repeat; +} + +.message_row .msg .body_wrap { + padding-left: 22px; +} + +.body_wrap .body { + font-weight: normal; + color: #8d9ccf; +} + +.message_row .delete_msg { + width: 24px; + padding-left: 10px; +} + +.message_row .delete_msg a { + display: block; + margin-top: 1px; + width: 13px; + height: 14px; + background: transparent url(/images/x_to_hide.gif) no-repeat; +} + +.message_row .delete_msg a:hover { + background: #3B5998 url(/images/x_to_hide_hover.gif) no-repeat; +} + +.inbox_footer { + display: block; + margin-top: -1px; + padding: 0px 10px 8px 13px; + border-top: 1px solid #cccccc; + background: #f7f7f7; + overflow: auto; +} + +.inbox_footer .mailbox_size { + float: left; + padding: 7px 0px 0px 0px; + color: #999999; +} + +.messages_thread { + padding: 20px 30px 0px 30px; +} + +.thread_head { + margin: 0px 0px 0px 10px; +} + +.thread_head h2 { + margin: 0px 20px 1px 153px; + padding: 0px 0px 0px 22px; + font-size: 15px; + color: #333333; +} + +.thread_head h2 .interlocutors { + font-size: 11px; + font-weight: normal; +} + +.message { + display: block; + margin-top: 10px; + overflow: hidden; +} + +.message .column { + float: left; + padding: 0px 0px 10px 0px; +} + +.message .author_picture { + width: 50px; + padding-bottom: 0px; +} + +.message .author_picture img { + display: block; +} + +.message .author_info { + width: 120px; + padding: 0px 10px 0px 0px; + font-weight: normal; + font-size: 9px; + text-align: right; +} + +.message .author_info .name { + padding: 3px 5px 0px 5px; + font-size: 11px; + font-weight: bold; + overflow: hidden; +} + +.message.unread .author_info .name { + padding: 3px 5px 4px 20px; + background: #eff2f7 url('/inbox/images/new_message.gif') no-repeat 7px 5px; + border-top: 1px solid #d8dfea; + overflow: hidden; +} + +.message .author_info .date { + display: block; + padding: 2px 5px 2px 0px; + color: #777777; +} + +.message .author_info .extras a { + float: right; + padding-right: 5px; + margin-bottom: 1px; +} + +.message .body { + padding: 3px 0px 14px 5px; +} + +.message.unread .body { + padding-top: 4px; +} + +.message .body .text { + width: 300px; + word-wrap: break-word; +} + +.message .body .text.no_body { + color: #777777; +} + +.msg_divide_btm { + height: 1px; + margin: 1px 0px 0px 185px; + background: #dddddd; + overflow: hidden; +} + +.reply_container { + margin: 10px 0px 15px 0px; + border: 0px; + background: #ffffff; + overflow: auto; +} + +.reply_container .row { + display: block; + padding: 5px 0px 0px 185px; + margin-right: 20px; + clear: both; +} + +.row textarea { + height: 100px; + width: 355px; + padding: 5px 0px 15px 3px; + font-size: 11px; + overflow: hidden; +} + +.row .submits { + float: left; +} + +.row .sub_controls { + padding-top: 11px; + font-size: 9px; + float: right; +} This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |