Browse Source

Merge remote-tracking branch 'upstream/develop' into 1603-ostatus-completion

pull/2401/head
Michael Vogel 6 years ago
parent
commit
27905cc21a
  1. 5
      doc/Accesskeys.md
  2. 8
      include/diaspora.php
  3. 8
      include/follow.php
  4. 32
      include/group.php
  5. 119
      mod/contacts.php
  6. 9
      mod/dfrn_confirm.php
  7. 20
      mod/dfrn_request.php
  8. 4
      mod/settings.php
  9. 91
      view/global.css
  10. 166
      view/templates/contact_edit.tpl
  11. 43
      view/theme/duepuntozero/style.css
  12. 1
      view/theme/frost-mobile/js/main.js
  13. 58
      view/theme/frost-mobile/style.css
  14. 90
      view/theme/frost-mobile/templates/contact_edit.tpl
  15. 64
      view/theme/frost/style.css
  16. 91
      view/theme/frost/templates/contact_edit.tpl
  17. 5
      view/theme/quattro/dark/style.css
  18. 5
      view/theme/quattro/green/style.css
  19. 11
      view/theme/quattro/lilac/style.css
  20. 29
      view/theme/quattro/quattro.less
  21. 48
      view/theme/smoothly/style.css
  22. 8
      view/theme/vier/dark.css
  23. 132
      view/theme/vier/style.css
  24. 98
      view/theme/vier/templates/contact_edit.tpl

5
doc/Accesskeys.md

@ -37,10 +37,7 @@ General
* o: Profile
* t: Contacts
* d: Common friends
* b: Toggle Blocked status
* i: Toggle Ignored status
* v: Toggle Archive status
* r: Repair
* r: Advanced
/message
--------

8
include/diaspora.php

@ -700,12 +700,10 @@ function diaspora_request($importer,$xml) {
return;
}
$g = q("select def_gid from user where uid = %d limit 1",
intval($importer['uid'])
);
if($g && intval($g[0]['def_gid'])) {
$def_gid = get_default_group($importer['uid'], $ret["network"]);
if (intval($def_gid)) {
require_once('include/group.php');
group_add_member($importer['uid'],'',$contact_record['id'],$g[0]['def_gid']);
group_add_member($importer['uid'], '', $contact_record['id'], $def_gid);
}
if($importer['page-flags'] == PAGE_NORMAL) {

8
include/follow.php

@ -258,12 +258,10 @@ function new_contact($uid,$url,$interactive = false) {
$contact_id = $r[0]['id'];
$result['cid'] = $contact_id;
$g = q("select def_gid from user where uid = %d limit 1",
intval($uid)
);
if($g && intval($g[0]['def_gid'])) {
$def_gid = get_default_group($uid, $contact["network"]);
if (intval($def_gid)) {
require_once('include/group.php');
group_add_member($uid,'',$contact_id,$g[0]['def_gid']);
group_add_member($uid, '', $contact_id, $def_gid);
}
require_once("include/Photo.php");

32
include/group.php

@ -188,7 +188,7 @@ function group_public_members($gid) {
}
function mini_group_select($uid,$gid = 0) {
function mini_group_select($uid,$gid = 0, $label = "") {
$grps = array();
$o = '';
@ -205,8 +205,11 @@ function mini_group_select($uid,$gid = 0) {
}
logger('groups: ' . print_r($grps,true));
if ($label == "")
$label = t('Default privacy group for new contacts');
$o = replace_macros(get_markup_template('group_selection.tpl'), array(
'$label' => t('Default privacy group for new contacts'),
'$label' => $label,
'$groups' => $grps
));
return $o;
@ -375,3 +378,28 @@ function groups_count_unseen() {
return $r;
}
/**
* @brief Returns the default group for a given user and network
*
* @param int $uid User id
* @param string $network network name
*
* @return int group id
*/
function get_default_group($uid, $network = "") {
$default_group = 0;
if ($network == NETWORK_OSTATUS)
$default_group = get_pconfig($uid, "ostatus", "default_group");
if ($default_group != 0)
return $default_group;
$g = q("SELECT `def_gid` FROM `user` WHERE `uid` = %d LIMIT 1", intval($uid));
if($g && intval($g[0]["def_gid"]))
$default_group = $g[0]["def_gid"];
return $default_group;
}

119
mod/contacts.php

@ -565,6 +565,9 @@ function contacts_content(&$a) {
($contact['rel'] == CONTACT_IS_FOLLOWER))
$follow = $a->get_baseurl(true)."/follow?url=".urlencode($contact["url"]);
// Load contactact related actions like hide, suggest, delete and others
$contact_actions = contact_actions($contact);
$o .= replace_macros($tpl, array(
//'$header' => t('Contact Editor'),
@ -584,7 +587,7 @@ function contacts_content(&$a) {
'$lblcrepair' => t("Repair URL settings"),
'$lblrecent' => t('View conversations'),
'$lblsuggest' => $lblsuggest,
'$delete' => t('Delete contact'),
//'$delete' => t('Delete contact'),
'$nettype' => $nettype,
'$poll_interval' => $poll_interval,
'$poll_enabled' => $poll_enabled,
@ -622,7 +625,11 @@ function contacts_content(&$a) {
'$about' => bbcode($contact["about"], false, false),
'$about_label' => t("About:"),
'$keywords' => $contact["keywords"],
'$keywords_label' => t("Tags:")
'$keywords_label' => t("Tags:"),
'$contact_action_button' => t("Actions"),
'$contact_actions' => $contact_actions,
'$contact_status' => t("Status"),
'$contact_settings_label' => t('Contact Settings'),
));
@ -800,6 +807,17 @@ function contacts_content(&$a) {
return $o;
}
/**
* @brief List of pages for the Contact TabBar
*
* Available Pages are 'Status', 'Profile', 'Contacts' and 'Common Friends'
*
* @param app $a
* @param int $contact_id The ID of the contact
* @param int $active_tab 1 if tab should be marked as active
*
* @return array with with contact TabBar data
*/
function contacts_tab($a, $contact_id, $active_tab) {
// tabs
$tabs = array(
@ -821,6 +839,7 @@ function contacts_tab($a, $contact_id, $active_tab) {
)
);
// Show this tab only if there is visible friend list
$x = count_all_friends(local_user(), $contact_id);
if ($x)
$tabs[] = array('label'=>t('Contacts'),
@ -830,6 +849,7 @@ function contacts_tab($a, $contact_id, $active_tab) {
'id' => 'allfriends-tab',
'accesskey' => 't');
// Show this tab only if there is visible common friend list
$common = count_common_friends(local_user(),$contact_id);
if ($common)
$tabs[] = array('label'=>t('Common Friends'),
@ -839,35 +859,13 @@ function contacts_tab($a, $contact_id, $active_tab) {
'id' => 'common-loc-tab',
'accesskey' => 'd');
$tabs[] = array('label' => t('Repair'),
$tabs[] = array('label' => t('Advanced'),
'url' => 'crepair/' . $contact_id,
'sel' => (($active_tab == 5)?'active':''),
'title' => t('Advanced Contact Settings'),
'id' => 'repair-tab',
'id' => 'advanced-tab',
'accesskey' => 'r');
$tabs[] = array('label' => (($contact['blocked']) ? t('Unblock') : t('Block') ),
'url' => 'contacts/' . $contact_id . '/block',
'sel' => '',
'title' => t('Toggle Blocked status'),
'id' => 'toggle-block-tab',
'accesskey' => 'b');
$tabs[] = array('label' => (($contact['readonly']) ? t('Unignore') : t('Ignore') ),
'url' => 'contacts/' . $contact_id . '/ignore',
'sel' => '',
'title' => t('Toggle Ignored status'),
'id' => 'toggle-ignore-tab',
'accesskey' => 'i');
$tabs[] = array('label' => (($contact['archive']) ? t('Unarchive') : t('Archive') ),
'url' => 'contacts/' . $contact_id . '/archive',
'sel' => '',
'title' => t('Toggle Archive status'),
'id' => 'toggle-archive-tab',
'accesskey' => 'v');
$tab_tpl = get_markup_template('common_tabs.tpl');
$tab_str = replace_macros($tab_tpl, array('$tabs' => $tabs));
@ -954,3 +952,72 @@ function _contact_detail_for_template($rr){
);
}
/**
* @brief Gives a array with actions which can performed to a given contact
*
* This includes actions like e.g. 'block', 'hide', 'archive', 'delete' and others
*
* @param array $contact Data about the Contact
* @return array with contact related actions
*/
function contact_actions($contact) {
$poll_enabled = in_array($contact['network'], array(NETWORK_DFRN, NETWORK_OSTATUS, NETWORK_FEED, NETWORK_MAIL, NETWORK_MAIL2));
$contact_action = array();
// Provide friend suggestion only for Friendica contacts
if($contact['network'] === NETWORK_DFRN) {
$contact_actions['suggest'] = array(
'label' => t('Suggest friends'),
'url' => 'fsuggest/' . $contact['id'],
'title' => '',
'sel' => '',
'id' => 'suggest',
);
}
if($poll_enabled) {
$contact_actions['update'] = array(
'label' => t('Update now'),
'url' => 'contacts/' . $contact['id'] . '/update',
'title' => '',
'sel' => '',
'id' => 'update',
);
}
$contact_actions['block'] = array(
'label' => (intval($contact['blocked']) ? t('Unblock') : t('Block') ),
'url' => 'contacts/' . $contact['id'] . '/block',
'title' => t('Toggle Blocked status'),
'sel' => (intval($contact['blocked']) ? 'active' : ''),
'id' => 'toggle-block',
);
$contact_actions['ignore'] = array(
'label' => (intval($contact['readonly']) ? t('Unignore') : t('Ignore') ),
'url' => 'contacts/' . $contact['id'] . '/ignore',
'title' => t('Toggle Ignored status'),
'sel' => (intval($contact['readonly']) ? 'active' : ''),
'id' => 'toggle-ignore',
);
$contact_actions['archive'] = array(
'label' => (intval($contact['archive']) ? t('Unarchive') : t('Archive') ),
'url' => 'contacts/' . $contact['id'] . '/archive',
'title' => t('Toggle Archive status'),
'sel' => (intval($contact['archive']) ? 'active' : ''),
'id' => 'toggle-archive',
);
$contact_actions['delete'] = array(
'label' => t('Delete'),
'url' => 'contacts/' . $contact['id'] . '/drop',
'title' => t('Delete contact'),
'sel' => '',
'id' => 'delete',
);
return $contact_actions;
}

9
mod/dfrn_confirm.php

@ -489,13 +489,10 @@ function dfrn_confirm_post(&$a,$handsfree = null) {
}
}
$g = q("select def_gid from user where uid = %d limit 1",
intval($uid)
);
if($contact && $g && intval($g[0]['def_gid'])) {
$def_gid = get_default_group($uid, $contact["network"]);
if($contact && intval($def_gid)) {
require_once('include/group.php');
group_add_member($uid,'',$contact['id'],$g[0]['def_gid']);
group_add_member($uid, '', $contact['id'], $def_gid);
}
// Let's send our user to the contact editor in case they want to

20
mod/dfrn_request.php

@ -174,18 +174,16 @@ function dfrn_request_post(&$a) {
info( t("Introduction complete.") . EOL);
}
$r = q("select id from contact where uid = %d and url = '%s' and `site-pubkey` = '%s' limit 1",
$r = q("SELECT `id`, `network` FROM `contact` WHERE `uid` = %d AND `url` = '%s' AND `site-pubkey` = '%s' LIMIT 1",
intval(local_user()),
dbesc($dfrn_url),
$parms['key'] // this was already escaped
);
if(count($r)) {
$g = q("select def_gid from user where uid = %d limit 1",
intval(local_user())
);
if($g && intval($g[0]['def_gid'])) {
$def_gid = get_default_group(local_user(), $r[0]["network"]);
if(intval($def_gid)) {
require_once('include/group.php');
group_add_member(local_user(),'',$r[0]['id'],$g[0]['def_gid']);
group_add_member(local_user(), '', $r[0]['id'], $def_gid);
}
$forwardurl = $a->get_baseurl()."/contacts/".$r[0]['id'];
} else
@ -388,19 +386,17 @@ function dfrn_request_post(&$a) {
intval($rel)
);
$r = q("select id from contact where poll = '%s' and uid = %d limit 1",
$r = q("SELECT `id`, `network` FROM `contact` WHERE `poll` = '%s' AND `uid` = %d LIMIT 1",
dbesc($poll),
intval($uid)
);
if(count($r)) {
$contact_id = $r[0]['id'];
$g = q("select def_gid from user where uid = %d limit 1",
intval($uid)
);
if($g && intval($g[0]['def_gid'])) {
$def_gid = get_default_group($uid, $r[0]["network"]);
if (intval($def_gid)) {
require_once('include/group.php');
group_add_member($uid,'',$contact_id,$g[0]['def_gid']);
group_add_member($uid, '', $contact_id, $def_gid);
}
$photo = avatar_img($addr);

4
mod/settings.php

@ -199,6 +199,7 @@ function settings_post(&$a) {
if(x($_POST, 'general-submit')) {
set_pconfig(local_user(), 'system', 'no_intelligent_shortening', intval($_POST['no_intelligent_shortening']));
set_pconfig(local_user(), 'system', 'ostatus_autofriend', intval($_POST['snautofollow']));
set_pconfig(local_user(), 'ostatus', 'default_group', $_POST['group-selection']);
set_pconfig(local_user(), 'ostatus', 'legacy_contact', $_POST['legacy_contact']);
} elseif(x($_POST, 'imap-submit')) {
@ -797,8 +798,11 @@ function settings_content(&$a) {
$settings_connectors .= '<span class="field_help">'.t('If you receive a message from an unknown OStatus user, this option decides what to do. If it is checked, a new contact will be created for every unknown user.').'</span>';
$settings_connectors .= '</div>';
$default_group = get_pconfig(local_user(), 'ostatus', 'default_group');
$legacy_contact = get_pconfig(local_user(), 'ostatus', 'legacy_contact');
$settings_connectors .= mini_group_select(local_user(), $default_group, t("Default group for OStatus contacts"));
if ($legacy_contact != "")
$a->page['htmlhead'] = '<meta http-equiv="refresh" content="0; URL='.$a->get_baseurl().'/ostatus_subscribe?url='.urlencode($legacy_contact).'">';

91
view/global.css

@ -1,6 +1,32 @@
/* General style rules .*/
.pull-right { float: right }
/* General designing elements */
.btn {
outline: none;
-moz-box-shadow: inset 0px 1px 0px 0px #ffffff;
-webkit-box-shadow: inset 0px 1px 0px 0px #ffffff;
box-shadow: inset 0px 1px 0px 0px #ffffff;
background-color: #ededed;
text-indent: 0;
border: 1px solid #dcdcdc;
display: inline-block;
color: #777777;
padding: 5px 10px;
text-align: center;
}
a.btn, a.btn:hover {
text-decoration: none;
color: inherit;
}
.menu-popup .divider {
height: 1px;
margin: 3px 0;
overflow: hidden;
background-color: #2d2d2d;
}
/* List of social Networks */
img.connector, img.connector-disabled {
height: 40px;
@ -277,20 +303,20 @@ a {
margin: 10px 0 10px;
}
.version-match {
font-weight: bold;
color: #00a700;
font-weight: bold;
color: #00a700;
}
.federation-graph {
width: 400px;
height: 400px;
float: right;
margin: 20px;
width: 400px;
height: 400px;
float: right;
margin: 20px;
}
.federation-network-graph {
width: 240px;
height: 240px;
float: left;
margin: 20px;
width: 240px;
height: 240px;
float: left;
margin: 20px;
}
ul.federation-stats,
ul.credits {
@ -302,10 +328,10 @@ ul.credits li {
width: 240px;
}
table#federation-stats {
width: 100%;
width: 100%;
}
td.federation-data {
border-bottom: 1px solid #000;
border-bottom: 1px solid #000;
}
.contact-entry-photo img {
@ -329,25 +355,48 @@ td.federation-data {
}
.crepair-label {
margin-top: 10px;
float: left;
width: 250px;
margin-top: 10px;
float: left;
width: 250px;
}
.crepair-input {
margin-top: 10px;
float: left;
width: 200px;
margin-top: 10px;
float: left;
width: 200px;
}
.renderinfo {
clear: both;
clear: both;
}
.p-addr {
clear: both;
clear: both;
}
#live-community {
clear: both;
clear: both;
}
/* contact-edit */
#contact-edit-status-wrapper {
border: 1px solid;
padding: 10px;
}
#contact-edit-actions {
float: right;
display: inline-block;
position: relative;
}
#contact-edit-actions > .menu-popup {
right: 0;
left: auto;
}
#contact-edit-settings-label:after {
content: ' »';
}
#contact-edit-settings {
display: none;
}

166
view/templates/contact_edit.tpl

@ -1,104 +1,98 @@
{{if $header}}<h2>{{$header}}</h2>{{/if}}
<div id="contact-edit-wrapper" >
{{* Insert Tab-Nav *}}
{{$tab_str}}
<div id="contact-edit-drop-link" >
<a href="contacts/{{$contact_id}}/drop" class="icon drophide" id="contact-edit-drop-link" onclick="return confirmDelete();" title="{{$delete}}" onmouseover="imgbright(this);" onmouseout="imgdull(this);"></a>
</div>
<div id="contact-edit-drop-link-end"></div>
<div id="contact-edit-nav-wrapper" >
<div id="contact-edit-links">
<ul>
{{if $relation_text}}
<li><div id="contact-edit-rel">{{$relation_text}}</div></li>
{{/if}}
{{if $lost_contact}}
<li><div id="lost-contact-message">{{$lost_contact}}</div></li>
{{/if}}
{{if $insecure}}
<li><div id="insecure-message">{{$insecure}}</div></li>
{{/if}}
{{if $blocked}}
<li><div id="block-message">{{$blocked}}</div></li>
{{/if}}
{{if $ignored}}
<li><div id="ignore-message">{{$ignored}}</div></li>
{{/if}}
{{if $archived}}
<li><div id="archive-message">{{$archived}}</div></li>
{{/if}}
</ul>
<ul>
{{if $common_text}}
<li><div id="contact-edit-common"><a href="{{$common_link}}">{{$common_text}}</a></div></li>
{{/if}}
{{if $all_friends}}
<li><div id="contact-edit-allfriends"><a href="allfriends/{{$contact_id}}">{{$all_friends}}</a></div></li>
{{/if}}
<!-- <li><a href="network/0?nets=all&cid={{$contact_id}}" id="contact-edit-view-recent">{{$lblrecent}}</a></li> -->
{{if $lblsuggest}}
<li><a href="fsuggest/{{$contact_id}}" id="contact-edit-suggest">{{$lblsuggest}}</a></li>
{{/if}}
{{if $follow}}
<li><div id="contact-edit-follow"><a href="{{$follow}}">{{$follow_text}}</a></div></li>
{{/if}}
</ul>
<div id="contact-edit-status-wrapper">
<span id="contact-edit-contact-status">{{$contact_status}}</span>
{{* This is the Action menu where contact related actions like 'ignore', 'hide' can be performed *}}
<div id="contact-edit-actions">
<a class="btn" rel="#contact-actions-menu" href="#" id="contact-edit-actions-button">{{$contact_action_button}}</a>
<ul role="menu" aria-haspopup="true" id="contact-actions-menu" class="menu-popup" >
{{if $lblsuggest}}<li role="menuitem"><a href="#" title="{{$contact_actions.suggest.title}}" onclick="window.location.href='{{$contact_actions.suggest.url}}'; return false;">{{$contact_actions.suggest.label}}</a></li>{{/if}}
{{if $poll_enabled}}<li role="menuitem"><a href="#" title="{{$contact_actions.update.title}}" onclick="window.location.href='{{$contact_actions.update.url}}'; return false;">{{$contact_actions.update.label}}</a></li>{{/if}}
<li class="divider"></li>
<li role="menuitem"><a href="#" title="{{$contact_actions.block.title}}" onclick="window.location.href='{{$contact_actions.block.url}}'; return false;">{{$contact_actions.block.label}}</a></li>
<li role="menuitem"><a href="#" title="{{$contact_actions.ignore.title}}" onclick="window.location.href='{{$contact_actions.ignore.url}}'; return false;">{{$contact_actions.ignore.label}}</a></li>
<li role="menuitem"><a href="#" title="{{$contact_actions.archive.title}}" onclick="window.location.href='{{$contact_actions.archive.url}}'; return false;">{{$contact_actions.archive.label}}</a></li>
<li role="menuitem"><a href="#" title="{{$contact_actions.delete.title}}" onclick="return confirmDelete();">{{$contact_actions.delete.label}}</a></li>
</ul>
</div>
{{* Block with status information about the contact *}}
<ul>
{{if $relation_text}}<li><div id="contact-edit-rel">{{$relation_text}}</div></li>{{/if}}
{{if $poll_enabled}}
<li><div id="contact-edit-last-update-text">{{$lastupdtext}} <span id="contact-edit-last-updated">{{$last_update}}</span></div>
{{if $poll_interval}}
<span id="contact-edit-poll-text">{{$updpub}}</span> {{$poll_interval}}
{{/if}}
</li>
{{/if}}
{{if $lost_contact}}<li><div id="lost-contact-message">{{$lost_contact}}</div></li>{{/if}}
{{if $insecure}}<li><div id="insecure-message">{{$insecure}}</div></li> {{/if}}
{{if $blocked}}<li><div id="block-message">{{$blocked}}</div></li>{{/if}}
{{if $ignored}}<li><div id="ignore-message">{{$ignored}}</div></li>{{/if}}
{{if $archived}}<li><div id="archive-message">{{$archived}}</div></li>{{/if}}
</ul>
<ul>
<!-- <li><a href="network/0?nets=all&cid={{$contact_id}}" id="contact-edit-view-recent">{{$lblrecent}}</a></li> -->
{{if $follow}}<li><div id="contact-edit-follow"><a href="{{$follow}}">{{$follow_text}}</a></div></li>{{/if}}
</ul>
</div> {{* End of contact-edit-status-wrapper *}}
{{* Some information about the contact from the profile *}}
<dl><dt>{{$profileurllabel}}</dt><dd><a target="blank" href="{{$url}}">{{$profileurl}}</a></dd></dl>
{{if $location}}<dl><dt>{{$location_label}}</dt><dd>{{$location}}</dd></dl>{{/if}}
{{if $keywords}}<dl><dt>{{$keywords_label}}</dt><dd>{{$keywords}}</dd></dl>{{/if}}
{{if $about}}<dl><dt>{{$about_label}}</dt><dd>{{$about}}</dd></dl>{{/if}}
</div>
</div>
<div id="contact-edit-nav-end"></div>
</div>{{* End of contact-edit-links *}}
<div id="contact-edit-links-end"></div>
<hr />
<hr />
<form action="contacts/{{$contact_id}}" method="post" >
<input type="hidden" name="contact_id" value="{{$contact_id}}">
<h4 id="contact-edit-settings-label" class="fakelink" onclick="openClose('contact-edit-settings')">{{$contact_settings_label}}</h4>
<div id="contact-edit-settings">
<form action="contacts/{{$contact_id}}" method="post" >
<input type="hidden" name="contact_id" value="{{$contact_id}}">
<div id="contact-edit-poll-wrapper">
{{if $poll_enabled}}
<div id="contact-edit-last-update-text">{{$lastupdtext}} <span id="contact-edit-last-updated">{{$last_update}}</span></div>
{{if $poll_interval}}
<span id="contact-edit-poll-text">{{$updpub}}</span> {{$poll_interval}}
<div id="contact-edit-end" ></div>
{{include file="field_checkbox.tpl" field=$notify}}
{{if $fetch_further_information}}
{{include file="field_select.tpl" field=$fetch_further_information}}
{{if $fetch_further_information.2 == 2 }} {{include file="field_textarea.tpl" field=$ffi_keyword_blacklist}} {{/if}}
{{/if}}
{{include file="field_checkbox.tpl" field=$hidden}}
<div id="contact-edit-info-wrapper">
<h4>{{$lbl_info1}}</h4>
<textarea id="contact-edit-info" rows="8" cols="60" name="info">{{$info}}</textarea>
<input class="contact-edit-submit" type="submit" name="submit" value="{{$submit|escape:'html'}}" />
</div>
<div id="contact-edit-info-end"></div>
{{if $profile_select}}
<div id="contact-edit-profile-select-text">
<h4>{{$lbl_vis1}}</h4>
<p>{{$lbl_vis2}}</p>
</div>
{{$profile_select}}
<div id="contact-edit-profile-select-end"></div>
<input class="contact-edit-submit" type="submit" name="submit" value="{{$submit|escape:'html'}}" />
{{/if}}
<span id="contact-edit-update-now" class="button"><a href="contacts/{{$contact_id}}/update" >{{$udnow}}</a></span>
{{/if}}
</div>
<div id="contact-edit-end" ></div>
{{include file="field_checkbox.tpl" field=$notify}}
{{if $fetch_further_information}}
{{include file="field_select.tpl" field=$fetch_further_information}}
{{if $fetch_further_information.2 == 2 }} {{include file="field_textarea.tpl" field=$ffi_keyword_blacklist}} {{/if}}
{{/if}}
{{include file="field_checkbox.tpl" field=$hidden}}
<div id="contact-edit-info-wrapper">
<h4>{{$lbl_info1}}</h4>
<textarea id="contact-edit-info" rows="8" cols="60" name="info">{{$info}}</textarea>
<input class="contact-edit-submit" type="submit" name="submit" value="{{$submit|escape:'html'}}" />
</div>
<div id="contact-edit-info-end"></div>
{{if $profile_select}}
<div id="contact-edit-profile-select-text">
<h4>{{$lbl_vis1}}</h4>
<p>{{$lbl_vis2}}</p>
</div>
{{$profile_select}}
<div id="contact-edit-profile-select-end"></div>
<input class="contact-edit-submit" type="submit" name="submit" value="{{$submit|escape:'html'}}" />
{{/if}}
</form>
</form>
</div>
</div>{{* End of contact-edit-nav-wrapper *}}
</div>

43
view/theme/duepuntozero/style.css

@ -83,6 +83,26 @@ blockquote {
margin-right: 5px;
}
ul.menu-popup {
position: absolute;
display: none;
width: auto;
margin: 2px 0 0;
padding: 0px;
list-style: none;
z-index: 100000;
border: 2px solid #444444;
background: #FFFFFF;
}
.menu-popup li a {
padding: 2px;
white-space: nowrap;
}
a.btn, a.btn:hover {
text-decoration: none;
color: inherit;
}
/* nav */
@ -140,12 +160,12 @@ nav #banner #logo-text a:hover { text-decoration: none; }
.nav-commlink, .nav-login-link {
display: block;
height: 15px;
display: block;
height: 15px;
margin-top: 67px;
margin-right: 2px;
//padding: 6px 10px;
padding: 6px 3px;
/*padding: 6px 10px;*/
padding: 6px 3px;
float: left;
bottom: 140px;
border: 1px solid #babdb6;
@ -244,7 +264,7 @@ section {
display:block;
float:left;
padding: 0.4em;
//margin-right: 1em;
/*margin-right: 1em;*/
margin-right: 3px ;
}
.tab.active {
@ -3371,17 +3391,6 @@ div.jGrowl div.info {
.nav-notify.show {
display: block;
}
ul.menu-popup {
position: absolute;
display: none;
width: 10em;
margin: 0px;
padding: 0px;
list-style: none;
z-index: 100000;
top: 90px;
left: 200px;
}
#nav-notifications-menu {
width: 320px;
max-height: 400px;
@ -3391,6 +3400,8 @@ ul.menu-popup {
-webkit-border-radius: 5px;
border-radius:5px;
border: 1px solid #888;
top: 90px;
left: 200px;
}
#nav-notifications-menu .contactname { font-weight: bold; font-size: 0.9em; }
#nav-notifications-menu img { float: left; margin-right: 5px; }

1
view/theme/frost-mobile/js/main.js

@ -13,7 +13,6 @@
if($(listID).is(":visible")) {
$(listID).hide();
$(listID+"-wrapper").show();
alert($(listID+"-wrapper").attr("id"));
}
else {
$(listID).show();

58
view/theme/frost-mobile/style.css

@ -139,6 +139,47 @@ blockquote {
margin-right: 5px;
}
.btn {
outline: none;
-moz-box-shadow: inset 0px 1px 0px 0px #ffffff;
-webkit-box-shadow: inset 0px 1px 0px 0px #ffffff;
box-shadow: inset 0px 1px 0px 0px #ffffff;
background-color: #ededed;
text-indent: 0;
border: 1px solid #dcdcdc;
display: inline-block;
color: #777777;
padding: 5px 10px;
text-align: center;
border-radius: 8px;
}
.menu-popup {
width: auto;
border: 2px solid #444444;
background: #FFFFFF;
position: absolute;
margin: 2px 0 0;
display: none;
z-index: 10000;
}
.menu-popup li a {
display: block;
padding: 2px;
}
.menu-popup li a:hover {
color: #FFFFFF;
background: #3465A4;
text-decoration: none;
}
ul.menu-popup li.divider {
height: 1px;
margin: 3px 0;
overflow: hidden;
background-color: #2d2d2d;
}
/* nav */
@ -2045,6 +2086,19 @@ input#profile-jot-email {
margin-left: 15px;
}
#contact-edit-status-wrapper {
padding: 10px;
border: 1px solid #aaa;
border-radius: 8px;
}
#contact-edit-contact-status {
font-weight: bold;
}
#contact-edit-actions {
float: right;
display: inline-block;
}
#contact-edit-wrapper {
margin-top: 10px;
}
@ -2059,14 +2113,10 @@ input#profile-jot-email {
}
#contact-edit-last-update-text {
float: left;
clear: left;
margin-top: 30px;
}
#contact-edit-poll-text {
float: left;
clear: left;
margin-top: 15px;
margin-bottom: 0px;
}

90
view/theme/frost-mobile/templates/contact_edit.tpl

@ -6,12 +6,6 @@
{{$tab_str}}
<div id="contact-edit-drop-link" >
<a href="contacts/{{$contact_id}}/drop" class="icon drophide" id="contact-edit-drop-link" onclick="return confirmDelete();" title="{{$delete}}" {{*onmouseover="imgbright(this);" onmouseout="imgdull(this);"*}}></a>
</div>
<div id="contact-edit-drop-link-end"></div>
<div class="vcard">
<div class="fn">{{$name}}</div>
<div id="profile-photo-wrapper"><img class="photo" style="width: 175px; height: 175px;" src="{{$photo}}" alt="{{$name}}" /></div>
@ -20,41 +14,49 @@
<div id="contact-edit-nav-wrapper" >
<div id="contact-edit-links">
<ul>
<li><div id="contact-edit-rel">{{$relation_text}}</div></li>
<li><div id="contact-edit-nettype">{{$nettype}}</div></li>
{{if $lost_contact}}
<li><div id="lost-contact-message">{{$lost_contact}}</div></li>
{{/if}}
{{if $insecure}}
<li><div id="insecure-message">{{$insecure}}</div></li>
{{/if}}
{{if $blocked}}
<li><div id="block-message">{{$blocked}}</div></li>
{{/if}}
{{if $ignored}}
<li><div id="ignore-message">{{$ignored}}</div></li>
{{/if}}
{{if $archived}}
<li><div id="archive-message">{{$archived}}</div></li>
{{/if}}
<li>&nbsp;</li>
{{if $common_text}}
<li><div id="contact-edit-common"><a href="{{$common_link}}">{{$common_text}}</a></div></li>
{{/if}}
{{if $all_friends}}
<li><div id="contact-edit-allfriends"><a href="allfriends/{{$contact_id}}">{{$all_friends}}</a></div></li>
{{/if}}
<li><a href="network/0?nets=all&cid={{$contact_id}}" id="contact-edit-view-recent">{{$lblrecent}}</a></li>
{{if $lblsuggest}}
<li><a href="fsuggest/{{$contact_id}}" id="contact-edit-suggest">{{$lblsuggest}}</a></li>
{{/if}}
</ul>
<div id="contact-edit-status-wrapper">
<span id="contact-edit-contact-status">{{$contact_status}}</span>
<div id="contact-edit-actions">
<div class="btn" id="contact-edit-actions-button" onclick="openClose('contact-actions-menu')">{{$contact_action_button}}</div>
<ul role="menu" aria-haspopup="true" id="contact-actions-menu" class="menu-popup" >
{{if $lblsuggest}}<li role="menuitem"><a href="#" title="{{$contact_actions.suggest.title}}" onclick="window.location.href='{{$contact_actions.suggest.url}}'; return false;">{{$contact_actions.suggest.label}}</a></li>{{/if}}
{{if $poll_enabled}}<li role="menuitem"><a href="#" title="{{$contact_actions.update.title}}" onclick="window.location.href='{{$contact_actions.update.url}}'; return false;">{{$contact_actions.update.label}}</a></li>{{/if}}
<li class="divider"></li>
<li role="menuitem"><a href="#" title="{{$contact_actions.block.title}}" onclick="window.location.href='{{$contact_actions.block.url}}'; return false;">{{$contact_actions.block.label}}</a></li>
<li role="menuitem"><a href="#" title="{{$contact_actions.ignore.title}}" onclick="window.location.href='{{$contact_actions.ignore.url}}'; return false;">{{$contact_actions.ignore.label}}</a></li>
<li role="menuitem"><a href="#" title="{{$contact_actions.archive.title}}" onclick="window.location.href='{{$contact_actions.archive.url}}'; return false;">{{$contact_actions.archive.label}}</a></li>
<li role="menuitem"><a href="#" title="{{$contact_actions.delete.title}}" onclick="return confirmDelete();">{{$contact_actions.delete.label}}</a></li>
</ul>
</div>
<ul>
<li><div id="contact-edit-rel">{{$relation_text}}</div></li>
<li><div id="contact-edit-nettype">{{$nettype}}</div></li>
{{if $poll_enabled}}
<div id="contact-edit-poll-wrapper">
<div id="contact-edit-last-update-text">{{$lastupdtext}} <span id="contact-edit-last-updated">{{$last_update}}</span></div>
</div>
{{/if}}
{{if $lost_contact}}
<li><div id="lost-contact-message">{{$lost_contact}}</div></li>
{{/if}}
{{if $insecure}}
<li><div id="insecure-message">{{$insecure}}</div></li>
{{/if}}
{{if $blocked}}
<li><div id="block-message">{{$blocked}}</div></li>
{{/if}}
{{if $ignored}}
<li><div id="ignore-message">{{$ignored}}</div></li>
{{/if}}
{{if $archived}}
<li><div id="archive-message">{{$archived}}</div></li>
{{/if}}
</ul>
</div>
</div>
</div>
<div id="contact-edit-nav-end"></div>
@ -63,12 +65,6 @@
<form action="contacts/{{$contact_id}}" method="post" >
<input type="hidden" name="contact_id" value="{{$contact_id}}">
{{if $poll_enabled}}
<div id="contact-edit-poll-wrapper">
<div id="contact-edit-last-update-text">{{$lastupdtext}} <span id="contact-edit-last-updated">{{$last_update}}</span></div>
<span id="contact-edit-poll-text">{{$updpub}} {{$poll_interval}}</span> <span id="contact-edit-update-now" class="button"><a id="update_now_link" href="contacts/{{$contact_id}}/update" >{{$udnow}}</a></span>
</div>
{{/if}}
<div id="contact-edit-end" ></div>
{{include file="field_checkbox.tpl" field=$hidden}}

64
view/theme/frost/style.css

@ -113,6 +113,51 @@ blockquote {
.pull-right { float: right }
.btn {
outline: none;
-moz-box-shadow: inset 0px 1px 0px 0px #ffffff;
-webkit-box-shadow: inset 0px 1px 0px 0px #ffffff;
box-shadow: inset 0px 1px 0px 0px #ffffff;
background-color: #ededed;
text-indent: 0;
border: 1px solid #dcdcdc;
display: inline-block;
color: #777777;
padding: 5px 10px;
text-align: center;
border-radius: 8px;
}
a.btn {
text-decoration: none;
color: inherit;
}
.menu-popup {
width: auto;
border: 2px solid #444444;
background: #FFFFFF;
position: absolute;
margin: 2px 0 0;
display: none;
z-index: 10000;
}
.menu-popup li a {
display: block;
padding: 2px;
}
.menu-popup li a:hover {
color: #FFFFFF;
background: #3465A4;
text-decoration: none;
}
ul.menu-popup li.divider {
height: 1px;
margin: 3px 0;
overflow: hidden;
background-color: #2d2d2d;
}
/* nav */
@ -1952,6 +1997,20 @@ input#dfrn-url {
margin-left: 15px;
}
#contact-edit-status-wrapper {
padding: 10px;
border: 1px solid #aaa;
border-radius: 8px;
}
#contact-edit-contact-status {
font-weight: bold;
}
#contact-edit-actions {
float: right;
display: inline-block;
}
#contact-edit-wrapper {
margin-top: 10px;
}
@ -1989,11 +2048,6 @@ input#dfrn-url {
margin-top: 5px;
}
#contact-edit-drop-link {
float: right;
margin-right: 20px;
}
#contact-edit-nav-end {
clear: both;
}

91
view/theme/frost/templates/contact_edit.tpl

@ -6,50 +6,51 @@
{{$tab_str}}
<div id="contact-edit-drop-link" >
<a href="contacts/{{$contact_id}}/drop" class="icon drophide" id="contact-edit-drop-link" onclick="return confirmDelete();" title="{{$delete}}" {{*onmouseover="imgbright(this);" onmouseout="imgdull(this);"*}}></a>
</div>
<div id="contact-edit-drop-link-end"></div>
<div id="contact-edit-nav-wrapper" >
<div id="contact-edit-links">
<ul>
<li><div id="contact-edit-rel">{{$relation_text}}</div></li>
<li><div id="contact-edit-nettype">{{$nettype}}</div></li>
{{if $lost_contact}}
<li><div id="lost-contact-message">{{$lost_contact}}</div></li>
{{/if}}
{{if $insecure}}
<li><div id="insecure-message">{{$insecure}}</div></li>
{{/if}}
{{if $blocked}}
<li><div id="block-message">{{$blocked}}</div></li>
{{/if}}
{{if $ignored}}
<li><div id="ignore-message">{{$ignored}}</div></li>
{{/if}}
{{if $archived}}
<li><div id="archive-message">{{$archived}}</div></li>
{{/if}}
<li>&nbsp;</li>
{{if $common_text}}
<li><div id="contact-edit-common"><a href="{{$common_link}}">{{$common_text}}</a></div></li>
{{/if}}
{{if $all_friends}}
<li><div id="contact-edit-allfriends"><a href="allfriends/{{$contact_id}}">{{$all_friends}}</a></div></li>
{{/if}}
<li><a href="network/?cid={{$contact_id}}" id="contact-edit-view-recent">{{$lblrecent}}</a></li>
{{if $lblsuggest}}
<li><a href="fsuggest/{{$contact_id}}" id="contact-edit-suggest">{{$lblsuggest}}</a></li>
{{/if}}
</ul>
<div id="contact-edit-status-wrapper">
<span id="contact-edit-contact-status">{{$contact_status}}</span>
<div id="contact-edit-actions">
<a class="btn" rel="#contact-actions-menu" href="#" id="contact-edit-actions-button">{{$contact_action_button}}</a>
<ul role="menu" aria-haspopup="true" id="contact-actions-menu" class="menu-popup" >
{{if $lblsuggest}}<li role="menuitem"><a href="#" title="{{$contact_actions.suggest.title}}" onclick="window.location.href='{{$contact_actions.suggest.url}}'; return false;">{{$contact_actions.suggest.label}}</a></li>{{/if}}
{{if $poll_enabled}}<li role="menuitem"><a href="#" title="{{$contact_actions.update.title}}" onclick="window.location.href='{{$contact_actions.update.url}}'; return false;">{{$contact_actions.update.label}}</a></li>{{/if}}
<li class="divider"></li>
<li role="menuitem"><a href="#" title="{{$contact_actions.block.title}}" onclick="window.location.href='{{$contact_actions.block.url}}'; return false;">{{$contact_actions.block.label}}</a></li>
<li role="menuitem"><a href="#" title="{{$contact_actions.ignore.title}}" onclick="window.location.href='{{$contact_actions.ignore.url}}'; return false;">{{$contact_actions.ignore.label}}</a></li>
<li role="menuitem"><a href="#" title="{{$contact_actions.archive.title}}" onclick="window.location.href='{{$contact_actions.archive.url}}'; return false;">{{$contact_actions.archive.label}}</a></li>
<li role="menuitem"><a href="#" title="{{$contact_actions.delete.title}}" onclick="return confirmDelete();">{{$contact_actions.delete.label}}</a></li>
</ul>
</div>
<ul>
<li><div id="contact-edit-rel">{{$relation_text}}</div></li>
<li><div id="contact-edit-nettype">{{$nettype}}</div></li>
{{if $poll_enabled}}
<div id="contact-edit-poll-wrapper">
<div id="contact-edit-last-update-text">{{$lastupdtext}} <span id="contact-edit-last-updated">{{$last_update}}</span></div>
</div>
{{/if}}
{{if $lost_contact}}
<li><div id="lost-contact-message">{{$lost_contact}}</div></li>
{{/if}}
{{if $insecure}}
<li><div id="insecure-message">{{$insecure}}</div></li>
{{/if}}
{{if $blocked}}
<li><div id="block-message">{{$blocked}}</div></li>
{{/if}}
{{if $ignored}}
<li><div id="ignore-message">{{$ignored}}</div></li>
{{/if}}
{{if $archived}}
<li><div id="archive-message">{{$archived}}</div></li>
{{/if}}
</ul>
</div>
</div>
</div>
<div id="contact-edit-nav-end"></div>
@ -58,12 +59,6 @@
<form action="contacts/{{$contact_id}}" method="post" >
<input type="hidden" name="contact_id" value="{{$contact_id}}">
{{if $poll_enabled}}
<div id="contact-edit-poll-wrapper">
<div id="contact-edit-last-update-text">{{$lastupdtext}} <span id="contact-edit-last-updated">{{$last_update}}</span></div>
<span id="contact-edit-poll-text">{{$updpub}}</span> {{$poll_interval}} <span id="contact-edit-update-now" class="button"><a href="contacts/{{$contact_id}}/update" >{{$udnow}}</a></span>
</div>
{{/if}}
<div id="contact-edit-end" ></div>
{{include file="field_checkbox.tpl" field=$hidden}}

5
view/theme/quattro/dark/style.css

@ -463,7 +463,7 @@ a:hover {
text-decoration: underline;
}
blockquote {
background: #FFFFFF;
background: #ffffff;
padding: 1em;
margin-left: 1em;
border-left: 1em solid #e6e6e6;
@ -1655,6 +1655,9 @@ span[id^="showmore-wrap"] {
overflow: hidden;
text-overflow: ellipsis;
}
#contact-edit-status-wrapper {
border-color: #364e59;
}
/* editor */
.jothidden {
display: none;

5
view/theme/quattro/green/style.css

@ -463,7 +463,7 @@ a:hover {
text-decoration: underline;
}
blockquote {
background: #FFFFFF;
background: #ffffff;
padding: 1em;
margin-left: 1em;
border-left: 1em solid #e6e6e6;
@ -1655,6 +1655,9 @@ span[id^="showmore-wrap"] {
overflow: hidden;
text-overflow: ellipsis;
}
#contact-edit-status-wrapper {
border-color: #9ade00;
}
/* editor */
.jothidden {
display: none;

11
view/theme/quattro/lilac/style.css

@ -420,7 +420,7 @@
body {
font-family: Liberation Sans, helvetica, arial, clean, sans-serif;
font-size: 11px;
background-color: #F6ECF9;
background-color: #f6ecf9;
color: #2d2d2d;
margin: 50px 0 0 0;
display: table;
@ -463,7 +463,7 @@ a:hover {
text-decoration: underline;
}
blockquote {
background: #FFFFFF;
background: #ffffff;
padding: 1em;
margin-left: 1em;
border-left: 1em solid #e6e6e6;
@ -1655,6 +1655,9 @@ span[id^="showmore-wrap"] {
overflow: hidden;
text-overflow: ellipsis;
}
#contact-edit-status-wrapper {
border-color: #86608e;
}
/* editor */
.jothidden {
display: none;
@ -1753,7 +1756,7 @@ span[id^="showmore-wrap"] {
height: 20px;
width: 500px;
font-weight: bold;
border: 1px solid #F6ECF9;
border: 1px solid #f6ecf9;
}
#jot #jot-title:-webkit-input-placeholder {
font-weight: normal;
@ -1780,7 +1783,7 @@ span[id^="showmore-wrap"] {
margin: 0;
height: 20px;
width: 200px;
border: 1px solid #F6ECF9;
border: 1px solid #f6ecf9;
}
#jot #jot-category:hover {
border: 1px solid #999999;

29
view/theme/quattro/quattro.less

@ -408,19 +408,19 @@ aside {
.group-delete-wrapper {
float: right;
margin-right: 50px;
.drophide {
background-image: url('../../../images/icons/22/delete.png');
display: block; width: 22px; height: 22px;
opacity: 0.3;
position: relative;
top: -50px;
}
.drop {
background-image: url('../../../images/icons/22/delete.png');
display: block; width: 22px; height: 22px;
position: relative;
top: -50px;
}
.drophide {
background-image: url('../../../images/icons/22/delete.png');
display: block; width: 22px; height: 22px;
opacity: 0.3;
position: relative;
top: -50px;
}
.drop {
background-image: url('../../../images/icons/22/delete.png');
display: block; width: 22px; height: 22px;
position: relative;
top: -50px;
}
}
/*
#group-members {
@ -502,7 +502,7 @@ section {
}
.sparkle {
cursor: url('icons/lock.cur'), pointer;
cursor: url('icons/lock.cur'), pointer;
}
/* wall item */
@ -959,6 +959,7 @@ span[id^="showmore-wrap"] {
text-overflow: ellipsis;
}
#contact-edit-status-wrapper { border-color: @JotToolsOverBackgroundColor;}
/* editor */
.jothidden { display: none; }
#jot {

48
view/theme/smoothly/style.css

@ -236,6 +236,39 @@ section {
color: #efefef;
}
ul.menu-popup {
position: absolute;
display: none;
width: auto;
margin: 2px 0 0;
padding: 0px;
list-style: none;
z-index: 100000;
color: #2e3436;
border-top: 1px;
background: #eeeeee;
border: 1px solid #7C7D7B;
border-radius: 0px 0px 5px 5px;
-webkit-border-radius: 0px 0px 5px 5px;
-moz-border-radius: 0px 0px 5px 5px;
box-shadow: 5px 5px 10px #242424;
-moz-box-shadow: 5px 5px 10px #242424;
-webkit-box-shadow: 5px 5px 10px #242424;
}
ul.menu-popup li a {
white-space: nowrap;
display: block;
padding: 5px 2px;
color: #2e3436;
}
ul.menu-popup li a:hover {
color: #efefef;
background: -webkit-gradient( linear, left top, left bottom, color-stop(0.05, #1873a2), color-stop(1, #6da6c4) );
background: -moz-linear-gradient( center top, #1873a2 5%, #6da6c4 100% );
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#1873a2', endColorstr='#6da6c4');
background-color: #1873a2;
}
/* ========= */
/* = Login = */
/* ========= */
@ -4271,16 +4304,6 @@ a.active {
.nav-notify.show {
display: block;
}
ul.menu-popup {
position: absolute;
display: none;
width: 10em;
margin: 0px;
padding: 0px;
list-style: none;
z-index: 100000;
top: 40px;
}
#nav-notifications-menu {
width: 320px;
max-height: 400px;
@ -4298,6 +4321,7 @@ ul.menu-popup {
box-shadow: 5px 5px 10px #242424;
-moz-box-shadow: 5px 5px 10px #242424;
-webkit-box-shadow: 5px 5px 10px #242424;
top: 40px;
}
#nav-notifications-menu .contactname {
@ -4406,6 +4430,10 @@ ul.menu-popup {
background: #000000;
}
.notify-seen a {
color: #efefef !important;
}
/* Pages profile widget ----------------------------------------------------------- */
#page-profile,

8
view/theme/vier/dark.css

@ -8,6 +8,12 @@ hr { background-color: #343434 !important; }
a, .wall-item-name, .fakelink {
color: #989898 !important;
}
.btn, .btn:hover{
color: #989898;
border: 2px solid #0C1116;
background-color: #0C1116;
text-shadow: none;
}
nav {
color: #989898 !important;
@ -36,7 +42,7 @@ body, section, blockquote, blockquote.shared_content, #profile-jot-form,
}
#profile-jot-acl-wrapper, #event-notice, #event-wrapper,
#cboxLoadedContent, .contact-photo-menu {
#cboxLoadedContent, .contact-photo-menu, #contact-edit-status-wrapper {
background-color: #252C33 !important;
}

132
view/theme/vier/style.css

@ -24,72 +24,72 @@ img {
}
#pending-update {
float:right;
color: #ffffff;
font-weight: bold;
background-color: #FF0000;
padding: 0em 0.3em;
float:right;
color: #ffffff;
font-weight: bold;
background-color: #FF0000;
padding: 0em 0.3em;
}
.admin.linklist {
border: 0px;
padding: 0px;
list-style: none;
margin-top: 0px;
border: 0px;
padding: 0px;
list-style: none;
margin-top: 0px;
}
.admin.link {
list-style-position: inside;
font-size: 1em;
/* padding-left: 5px;
margin: 5px; */
list-style-position: inside;
font-size: 1em;
/* padding-left: 5px;
margin: 5px; */
}
#adminpage dl {
clear: left;
margin-bottom: 2px;
padding-bottom: 2px;
border-bottom: 1px solid black;
clear: left;
margin-bottom: 2px;
padding-bottom: 2px;
border-bottom: 1px solid black;
}
#adminpage dt {
width: 200px;