Merge branch '0.8.x' of git@gitorious.org:+laconica-developers/laconica/dev into 0.8.x

This commit is contained in:
Evan Prodromou 2009-06-17 08:18:33 -07:00
commit 8384e7c7f6
11 changed files with 131 additions and 179 deletions

View File

@ -98,48 +98,6 @@ class AttachmentAction extends Action
return $a->title(); return $a->title();
} }
/**
* Last-modified date for page
*
* When was the content of this page last modified? Based on notice,
* profile, avatar.
*
* @return int last-modified date as unix timestamp
*/
/*
function lastModified()
{
return max(strtotime($this->notice->created),
strtotime($this->profile->modified),
($this->avatar) ? strtotime($this->avatar->modified) : 0);
}
*/
/**
* An entity tag for this page
*
* Shows the ETag for the page, based on the notice ID and timestamps
* for the notice, profile, and avatar. It's weak, since we change
* the date text "one hour ago", etc.
*
* @return string etag
*/
/*
function etag()
{
$avtime = ($this->avatar) ?
strtotime($this->avatar->modified) : 0;
return 'W/"' . implode(':', array($this->arg('action'),
common_language(),
$this->notice->id,
strtotime($this->notice->created),
strtotime($this->profile->modified),
$avtime)) . '"';
}
*/
/** /**
* Handle input * Handle input
* *

View File

@ -74,46 +74,5 @@ class Attachment_ajaxAction extends AttachmentAction
} }
$this->elementEnd('div'); $this->elementEnd('div');
} }
/**
* Last-modified date for page
*
* When was the content of this page last modified? Based on notice,
* profile, avatar.
*
* @return int last-modified date as unix timestamp
*/
/*
function lastModified()
{
return max(strtotime($this->notice->created),
strtotime($this->profile->modified),
($this->avatar) ? strtotime($this->avatar->modified) : 0);
}
*/
/**
* An entity tag for this page
*
* Shows the ETag for the page, based on the notice ID and timestamps
* for the notice, profile, and avatar. It's weak, since we change
* the date text "one hour ago", etc.
*
* @return string etag
*/
/*
function etag()
{
$avtime = ($this->avatar) ?
strtotime($this->avatar->modified) : 0;
return 'W/"' . implode(':', array($this->arg('action'),
common_language(),
$this->notice->id,
strtotime($this->notice->created),
strtotime($this->profile->modified),
$avtime)) . '"';
}
*/
} }

View File

@ -125,16 +125,18 @@ class BlockAction extends Action
function areYouSureForm() function areYouSureForm()
{ {
$id = $this->profile->id; $id = $this->profile->id;
$this->elementStart('form', array('id' => 'block-' . $id,
'method' => 'post',
'class' => 'form_settings form_entity_block',
'action' => common_local_url('block')));
$this->elementStart('fieldset');
$this->hidden('token', common_session_token());
$this->element('legend', _('Block user'));
$this->element('p', null, $this->element('p', null,
_('Are you sure you want to block this user? '. _('Are you sure you want to block this user? '.
'Afterwards, they will be unsubscribed from you, '. 'Afterwards, they will be unsubscribed from you, '.
'unable to subscribe to you in the future, and '. 'unable to subscribe to you in the future, and '.
'you will not be notified of any @-replies from them.')); 'you will not be notified of any @-replies from them.'));
$this->elementStart('form', array('id' => 'block-' . $id,
'method' => 'post',
'class' => 'block',
'action' => common_local_url('block')));
$this->hidden('token', common_session_token());
$this->element('input', array('id' => 'blockto-' . $id, $this->element('input', array('id' => 'blockto-' . $id,
'name' => 'blockto', 'name' => 'blockto',
'type' => 'hidden', 'type' => 'hidden',
@ -144,8 +146,9 @@ class BlockAction extends Action
$this->hidden($k, $v); $this->hidden($k, $v);
} }
} }
$this->submit('no', _('No')); $this->submit('form_action-no', _('No'), 'submit form_action-primary', 'no', _("Do not block this user from this group"));
$this->submit('yes', _('Yes')); $this->submit('form_action-yes', _('Yes'), 'submit form_action-secondary', 'yes', _('Block this user from this group'));
$this->elementEnd('fieldset');
$this->elementEnd('form'); $this->elementEnd('form');
} }

View File

@ -151,17 +151,19 @@ class GroupblockAction extends Action
function areYouSureForm() function areYouSureForm()
{ {
$id = $this->profile->id; $id = $this->profile->id;
$this->elementStart('form', array('id' => 'block-' . $id,
'method' => 'post',
'class' => 'form_settings form_entity_block',
'action' => common_local_url('groupblock')));
$this->elementStart('fieldset');
$this->hidden('token', common_session_token());
$this->element('legend', null, _('Block user'));
$this->element('p', null, $this->element('p', null,
sprintf(_('Are you sure you want to block user "%s" from the group "%s"? '. sprintf(_('Are you sure you want to block user "%s" from the group "%s"? '.
'They will be removed from the group, unable to post, and '. 'They will be removed from the group, unable to post, and '.
'unable to subscribe to the group in the future.'), 'unable to subscribe to the group in the future.'),
$this->profile->getBestName(), $this->profile->getBestName(),
$this->group->getBestName())); $this->group->getBestName()));
$this->elementStart('form', array('id' => 'block-' . $id,
'method' => 'post',
'class' => 'block',
'action' => common_local_url('groupblock')));
$this->hidden('token', common_session_token());
$this->hidden('blockto-' . $this->profile->id, $this->hidden('blockto-' . $this->profile->id,
$this->profile->id, $this->profile->id,
'blockto'); 'blockto');
@ -173,8 +175,9 @@ class GroupblockAction extends Action
$this->hidden($k, $v); $this->hidden($k, $v);
} }
} }
$this->submit('no', _('No')); $this->submit('form_action-no', _('No'), 'submit form_action-primary', 'no', _("Do not block this user from this group"));
$this->submit('yes', _('Yes')); $this->submit('form_action-yes', _('Yes'), 'submit form_action-secondary', 'yes', _('Block this user from this group'));
$this->elementEnd('fieldset');
$this->elementEnd('form'); $this->elementEnd('form');
} }

View File

@ -231,7 +231,6 @@ class NewnoticeAction extends Action
if (isset($mimetype)) { if (isset($mimetype)) {
$this->storeFile($notice, $mimetype); $this->storeFile($notice, $mimetype);
} }
$this->saveUrls($notice);
common_broadcast_notice($notice); common_broadcast_notice($notice);
if ($this->boolean('ajax')) { if ($this->boolean('ajax')) {
@ -284,24 +283,6 @@ class NewnoticeAction extends Action
} }
} }
/** save all urls in the notice to the db
*
* follow redirects and save all available file information
* (mimetype, date, size, oembed, etc.)
*
* @param class $notice Notice to pull URLs from
*
* @return void
*/
function saveUrls($notice, $uploaded = null) {
common_replace_urls_callback($notice->content, array($this, 'saveUrl'), $notice->id);
}
function saveUrl($data) {
list($url, $notice_id) = $data;
$zzz = File::processNew($url, $notice_id);
}
/** /**
* Show an Ajax-y error message * Show an Ajax-y error message
* *

View File

@ -222,6 +222,7 @@ class Notice extends Memcached_DataObject
$notice->addToInboxes(); $notice->addToInboxes();
$notice->saveGroups(); $notice->saveGroups();
$notice->saveUrls();
$notice->query('COMMIT'); $notice->query('COMMIT');
@ -236,6 +237,24 @@ class Notice extends Memcached_DataObject
return $notice; return $notice;
} }
/** save all urls in the notice to the db
*
* follow redirects and save all available file information
* (mimetype, date, size, oembed, etc.)
*
* @param class $notice Notice to pull URLs from
*
* @return void
*/
function saveUrls() {
common_replace_urls_callback($this->content, array($this, 'saveUrl'), $this->id);
}
function saveUrl($data) {
list($url, $notice_id) = $data;
File::processNew($url, $notice_id);
}
static function checkDupes($profile_id, $content) { static function checkDupes($profile_id, $content) {
$profile = Profile::staticGet($profile_id); $profile = Profile::staticGet($profile_id);
if (!$profile) { if (!$profile) {

View File

@ -230,21 +230,10 @@ $(document).ready(function(){
}; };
$("#form_notice").ajaxForm(PostNotice); $("#form_notice").ajaxForm(PostNotice);
$("#form_notice").each(addAjaxHidden); $("#form_notice").each(addAjaxHidden);
NoticeHover();
NoticeReply(); NoticeReply();
NoticeAttachments(); NoticeAttachments();
}); });
function NoticeHover() {
function mouseHandler(e) {
$(e.target).closest('li.hentry')[(e.type === 'mouseover') ? 'addClass' : 'removeClass']('hover');
};
$('#content .notices').mouseover(mouseHandler);
$('#content .notices').mouseout(mouseHandler);
}
function NoticeReply() { function NoticeReply() {
if ($('#notice_data-text').length > 0) { if ($('#notice_data-text').length > 0) {
$('#content .notice').each(function() { $('#content .notice').each(function() {

View File

@ -154,7 +154,8 @@ font-weight:bold;
#form_invite legend, #form_invite legend,
#form_notice_delete legend, #form_notice_delete legend,
#form_password_recover legend, #form_password_recover legend,
#form_password_change legend { #form_password_change legend,
.form_entity_block legend {
display:none; display:none;
} }
@ -306,7 +307,6 @@ padding:4px 11px;
border-width:1px; border-width:1px;
border-style:solid; border-style:solid;
border-bottom:0; border-bottom:0;
text-shadow: 2px 2px 2px #ddd;
font-weight:bold; font-weight:bold;
} }
#site_nav_local_views .nav { #site_nav_local_views .nav {
@ -396,8 +396,8 @@ border-radius:7px;
-moz-border-radius-topleft:0; -moz-border-radius-topleft:0;
-webkit-border-radius:7px; -webkit-border-radius:7px;
-webkit-border-top-left-radius:0; -webkit-border-top-left-radius:0;
border-style:solid;
border-width:1px; border-width:1px;
border-style:solid;
} }
#shownotice #content { #shownotice #content {
min-height:0; min-height:0;
@ -413,7 +413,7 @@ float:left;
width:27.917%; width:27.917%;
min-height:259px; min-height:259px;
float:left; float:left;
margin-left:0.385%; margin-left:0.5%;
padding:1.795%; padding:1.795%;
border-radius:7px; border-radius:7px;
-moz-border-radius:7px; -moz-border-radius:7px;
@ -469,7 +469,6 @@ height:16px;
#form_notice #notice_data-attach { #form_notice #notice_data-attach {
left:183px; left:183px;
padding:0; padding:0;
height:16px; height:16px;
} }
#form_notice .form_note { #form_notice .form_note {
@ -623,7 +622,8 @@ display:block;
.entity_send-a-message a, .entity_send-a-message a,
.entity_edit a, .entity_edit a,
.form_user_nudge input.submit, .form_user_nudge input.submit,
.entity_nudge p { .entity_nudge p,
.form_make_admin input.submit {
border:0; border:0;
padding-left:20px; padding-left:20px;
} }

Binary file not shown.

After

Width:  |  Height:  |  Size: 100 B

View File

@ -19,7 +19,7 @@ font-family: "Lucida Sans Unicode", "Lucida Grande", sans-serif;
font-size:1em; font-size:1em;
} }
address { address {
margin-right:7.18%; margin-right:7.2%;
} }
input, textarea, select, option { input, textarea, select, option {
@ -27,7 +27,7 @@ font-family: "Lucida Sans Unicode", "Lucida Grande", sans-serif;
} }
input, textarea, select, input, textarea, select,
.entity_remote_subscribe { .entity_remote_subscribe {
border-color:#aaa; border-color:#AAAAAA;
} }
#filter_tags ul li { #filter_tags ul li {
border-color:#C3D6DF; border-color:#C3D6DF;
@ -47,10 +47,13 @@ background-color:#A9BF4F;
input:focus, textarea:focus, select:focus, input:focus, textarea:focus, select:focus,
#form_notice.warning #notice_data-text { #form_notice.warning #notice_data-text {
border-color:#A9BF4F; border-color:#A9BF4F;
box-shadow:3px 3px 3px rgba(194, 194, 194, 0.3);
-moz-box-shadow:3px 3px 3px rgba(194, 194, 194, 0.3);
-webkit-box-shadow:3px 3px 3px rgba(194, 194, 194, 0.3);
} }
input.submit, input.submit,
.entity_remote_subscribe { .entity_remote_subscribe {
color:#fff; color:#FFFFFF;
} }
a, a,
@ -62,7 +65,8 @@ div.notice-options input,
.entity_send-a-message a, .entity_send-a-message a,
.form_user_nudge input.submit, .form_user_nudge input.submit,
.entity_nudge p, .entity_nudge p,
.form_settings input.form_action-primary { .form_settings input.form_action-primary,
.form_make_admin input.submit {
color:#002E6E; color:#002E6E;
} }
@ -79,10 +83,10 @@ background-color:#CEE1E9;
} }
#notice_text-count { #notice_text-count {
color:#333; color:#333333;
} }
#form_notice.warning #notice_text-count { #form_notice.warning #notice_text-count {
color:#000; color:#000000;
} }
#form_notice label[for=notice_data-attach] { #form_notice label[for=notice_data-attach] {
background:transparent url(../../base/images/icons/twotone/green/clip-01.gif) no-repeat 0 45%; background:transparent url(../../base/images/icons/twotone/green/clip-01.gif) no-repeat 0 45%;
@ -92,27 +96,38 @@ opacity:0;
} }
#form_notice.processing #notice_action-submit { #form_notice.processing #notice_action-submit {
background:#fff url(../../base/images/icons/icon_processing.gif) no-repeat 47% 47%; background:#FFFFFF url(../../base/images/icons/icon_processing.gif) no-repeat 47% 47%;
cursor:wait; cursor:wait;
text-indent:-9999px; text-indent:-9999px;
} }
#content {
box-shadow:5px 7px 7px rgba(194, 194, 194, 0.3);
-moz-box-shadow:5px 7px 7px rgba(194, 194, 194, 0.3);
-webkit-box-shadow:5px 7px 7px rgba(194, 194, 194, 0.3);
}
#content, #content,
#site_nav_local_views a, #site_nav_local_views a,
#aside_primary { #aside_primary {
border-color:#fff; border-color:transparent;
} }
#content, #content,
#site_nav_local_views .current a { #site_nav_local_views .current a {
background-color:#fff; background-color:#FFFFFF;
} }
#site_nav_local_views a { #site_nav_local_views a {
background-color:rgba(255, 255, 255, 0.2); background-color:rgba(194, 194, 194, 0.5);
box-shadow:3px 7px 5px rgba(194, 194, 194, 0.5);
-moz-box-shadow:3px 7px 5px rgba(194, 194, 194, 0.5);
-webkit-box-shadow:3px 7px 5px rgba(194, 194, 194, 0.5);
} }
#site_nav_local_views a:hover { #site_nav_local_views a:hover {
background-color:rgba(255, 255, 255, 0.7); background-color:rgba(255, 255, 255, 0.7);
} }
#site_nav_local_views .current a {
text-shadow: rgba(194,194,194,0.5) 1px 1px 1px;
}
.error { .error {
background-color:#F7E8E8; background-color:#F7E8E8;
@ -123,8 +138,8 @@ background-color:#EFF3DC;
#anon_notice { #anon_notice {
background-color:#C3D6DF; background-color:#C3D6DF;
color:#fff; color:#FFFFFF;
border-color:#fff; border-color:#FFFFFF;
} }
#showstream #anon_notice { #showstream #anon_notice {
@ -152,7 +167,8 @@ background-image:url(../../base/images/icons/icon_foaf.gif);
.form_user_unblock input.submit, .form_user_unblock input.submit,
.form_group_block input.submit, .form_group_block input.submit,
.form_group_unblock input.submit, .form_group_unblock input.submit,
.entity_nudge p { .entity_nudge p,
.form_make_admin input.submit {
background-position: 0 40%; background-position: 0 40%;
background-repeat: no-repeat; background-repeat: no-repeat;
background-color:transparent; background-color:transparent;
@ -162,7 +178,7 @@ background-color:transparent;
.form_user_subscribe input.submit, .form_user_subscribe input.submit,
.form_user_unsubscribe input.submit { .form_user_unsubscribe input.submit {
background-color:#A9BF4F; background-color:#A9BF4F;
color:#fff; color:#FFFFFF;
} }
.form_user_unsubscribe input.submit, .form_user_unsubscribe input.submit,
.form_group_leave input.submit, .form_group_leave input.submit,
@ -186,6 +202,9 @@ background-image:url(../../base/images/icons/twotone/green/mail.gif);
.form_group_unblock input.submit { .form_group_unblock input.submit {
background-image:url(../../base/images/icons/twotone/green/shield.gif); background-image:url(../../base/images/icons/twotone/green/shield.gif);
} }
.form_make_admin input.submit {
background-image:url(../../base/images/icons/twotone/green/admin.gif);
}
/* NOTICES */ /* NOTICES */
.notice .attachment { .notice .attachment {
@ -212,24 +231,25 @@ background:transparent url(../../base/images/icons/twotone/green/trash.gif) no-r
} }
.notices div.entry-content, .notices div.entry-content,
.notices div.notice-options, .notices div.notice-options {
.notices li.hover .notices div.entry-content,
.notices li.hover .notices div.notice-options {
opacity:0.4; opacity:0.4;
} }
.notices li.hover div.entry-content, .notices li:hover div.entry-content,
.notices li.hover div.notice-options { .notices li:hover div.notice-options {
opacity:1; opacity:1;
} }
div.entry-content { div.entry-content {
color:#333; color:#333333;
} }
div.notice-options a, div.notice-options a,
div.notice-options input { div.notice-options input {
font-family:sans-serif; font-family:sans-serif;
} }
.notices li.hover { .notices li:hover {
background-color:#fcfcfc; background-color:#FCFCFC;
}
#conversation .notices li:hover {
background-color:transparent;
} }
.notices .notices { .notices .notices {

View File

@ -19,7 +19,7 @@ font-family: "Lucida Sans Unicode", "Lucida Grande", sans-serif;
font-size:1em; font-size:1em;
} }
address { address {
margin-right:7.18%; margin-right:7.2%;
} }
input, textarea, select, option { input, textarea, select, option {
@ -27,10 +27,10 @@ font-family: "Lucida Sans Unicode", "Lucida Grande", sans-serif;
} }
input, textarea, select, input, textarea, select,
.entity_remote_subscribe { .entity_remote_subscribe {
border-color:#aaa; border-color:#AAAAAA;
} }
#filter_tags ul li { #filter_tags ul li {
border-color:#ddd; border-color:#DDDDDD;
} }
.form_settings input.form_action-primary { .form_settings input.form_action-primary {
@ -47,10 +47,13 @@ background-color:#9BB43E;
input:focus, textarea:focus, select:focus, input:focus, textarea:focus, select:focus,
#form_notice.warning #notice_data-text { #form_notice.warning #notice_data-text {
border-color:#9BB43E; border-color:#9BB43E;
box-shadow:3px 3px 3px rgba(194, 194, 194, 0.3);
-moz-box-shadow:3px 3px 3px rgba(194, 194, 194, 0.3);
-webkit-box-shadow:3px 3px 3px rgba(194, 194, 194, 0.3);
} }
input.submit, input.submit,
.entity_remote_subscribe { .entity_remote_subscribe {
color:#fff; color:#FFFFFF;
} }
a, a,
@ -62,7 +65,8 @@ div.notice-options input,
.entity_send-a-message a, .entity_send-a-message a,
.form_user_nudge input.submit, .form_user_nudge input.submit,
.entity_nudge p, .entity_nudge p,
.form_settings input.form_action-primary { .form_settings input.form_action-primary,
.form_make_admin input.submit {
color:#002E6E; color:#002E6E;
} }
@ -79,10 +83,10 @@ background-color:#CEE1E9;
} }
#notice_text-count { #notice_text-count {
color:#333; color:#333333;
} }
#form_notice.warning #notice_text-count { #form_notice.warning #notice_text-count {
color:#000; color:#000000;
} }
#form_notice label[for=notice_data-attach] { #form_notice label[for=notice_data-attach] {
background:transparent url(../../base/images/icons/twotone/green/clip-01.gif) no-repeat 0 45%; background:transparent url(../../base/images/icons/twotone/green/clip-01.gif) no-repeat 0 45%;
@ -92,27 +96,38 @@ opacity:0;
} }
#form_notice.processing #notice_action-submit { #form_notice.processing #notice_action-submit {
background:#fff url(../../base/images/icons/icon_processing.gif) no-repeat 47% 47%; background:#FFFFFF url(../../base/images/icons/icon_processing.gif) no-repeat 47% 47%;
cursor:wait; cursor:wait;
text-indent:-9999px; text-indent:-9999px;
} }
#content {
box-shadow:5px 7px 7px rgba(194, 194, 194, 0.3);
-moz-box-shadow:5px 7px 7px rgba(194, 194, 194, 0.3);
-webkit-box-shadow:5px 7px 7px rgba(194, 194, 194, 0.3);
}
#content, #content,
#site_nav_local_views a, #site_nav_local_views a,
#aside_primary { #aside_primary {
border-color:#fff; border-color:transparent;
} }
#content, #content,
#site_nav_local_views .current a { #site_nav_local_views .current a {
background-color:#fff; background-color:#FFFFFF;
} }
#site_nav_local_views a { #site_nav_local_views a {
background-color:rgba(135, 180, 200, 0.3); background-color:rgba(194, 194, 194, 0.5);
box-shadow:3px 7px 5px rgba(194, 194, 194, 0.5);
-moz-box-shadow:3px 7px 5px rgba(194, 194, 194, 0.5);
-webkit-box-shadow:3px 7px 5px rgba(194, 194, 194, 0.5);
} }
#site_nav_local_views a:hover { #site_nav_local_views a:hover {
background-color:rgba(255, 255, 255, 0.7); background-color:rgba(255, 255, 255, 0.7);
} }
#site_nav_local_views .current a {
text-shadow: rgba(194,194,194,0.5) 1px 1px 1px;
}
.error { .error {
background-color:#F7E8E8; background-color:#F7E8E8;
@ -123,8 +138,8 @@ background-color:#EFF3DC;
#anon_notice { #anon_notice {
background-color:#87B4C8; background-color:#87B4C8;
color:#fff; color:#FFFFFF;
border-color:#fff; border-color:#FFFFFF;
} }
#showstream #anon_notice { #showstream #anon_notice {
@ -152,7 +167,8 @@ background-image:url(../../base/images/icons/icon_foaf.gif);
.form_user_unblock input.submit, .form_user_unblock input.submit,
.form_group_block input.submit, .form_group_block input.submit,
.form_group_unblock input.submit, .form_group_unblock input.submit,
.entity_nudge p { .entity_nudge p,
.form_make_admin input.submit {
background-position: 0 40%; background-position: 0 40%;
background-repeat: no-repeat; background-repeat: no-repeat;
background-color:transparent; background-color:transparent;
@ -162,7 +178,7 @@ background-color:transparent;
.form_user_subscribe input.submit, .form_user_subscribe input.submit,
.form_user_unsubscribe input.submit { .form_user_unsubscribe input.submit {
background-color:#9BB43E; background-color:#9BB43E;
color:#fff; color:#FFFFFF;
} }
.form_user_unsubscribe input.submit, .form_user_unsubscribe input.submit,
.form_group_leave input.submit, .form_group_leave input.submit,
@ -186,6 +202,9 @@ background-image:url(../../base/images/icons/twotone/green/mail.gif);
.form_group_unblock input.submit { .form_group_unblock input.submit {
background-image:url(../../base/images/icons/twotone/green/shield.gif); background-image:url(../../base/images/icons/twotone/green/shield.gif);
} }
.form_make_admin input.submit {
background-image:url(../../base/images/icons/twotone/green/admin.gif);
}
/* NOTICES */ /* NOTICES */
.notice .attachment { .notice .attachment {
@ -212,24 +231,25 @@ background:transparent url(../../base/images/icons/twotone/green/trash.gif) no-r
} }
.notices div.entry-content, .notices div.entry-content,
.notices div.notice-options, .notices div.notice-options {
.notices li.hover .notices div.entry-content,
.notices li.hover .notices div.notice-options {
opacity:0.4; opacity:0.4;
} }
.notices li.hover div.entry-content, .notices li:hover div.entry-content,
.notices li.hover div.notice-options { .notices li:hover div.notice-options {
opacity:1; opacity:1;
} }
div.entry-content { div.entry-content {
color:#333; color:#333333;
} }
div.notice-options a, div.notice-options a,
div.notice-options input { div.notice-options input {
font-family:sans-serif; font-family:sans-serif;
} }
.notices li.hover { .notices li:hover {
background-color:#fcfcfc; background-color:#FCFCFC;
}
#conversation .notices li:hover {
background-color:transparent;
} }
.notices .notices { .notices .notices {