--- loncom/interface/loncommon.pm 2009/11/10 13:58:55 1.913
+++ loncom/interface/loncommon.pm 2010/02/28 22:56:23 1.945
@@ -1,7 +1,7 @@
# The LearningOnline Network with CAPA
# a pile of common routines
#
-# $Id: loncommon.pm,v 1.913 2009/11/10 13:58:55 droeschl Exp $
+# $Id: loncommon.pm,v 1.945 2010/02/28 22:56:23 raeburn Exp $
#
# Copyright Michigan State University Board of Trustees
#
@@ -483,9 +483,9 @@ ENDAUTHORBRW
sub coursebrowser_javascript {
my ($domainfilter,$sec_element,$formname,$role_element,$crstype) = @_;
- my $wintitle = &mt('Course Browser');
- if ($crstype ne '') {
- $wintitle = &mt($crstype);
+ my $wintitle = 'Course_Browser';
+ if ($crstype eq 'Community') {
+ $wintitle = 'Community_Browser';
}
my $id_functions = &javascript_index_functions();
my $output = '
@@ -1127,7 +1127,7 @@ sub help_open_topic {
$template.=' '
.' ';
if ($text ne "") {
$template.='';
@@ -1719,10 +1719,13 @@ sub create_workbook {
my $workbook = Spreadsheet::WriteExcel->new('/home/httpd'.$filename);
if (! defined($workbook)) {
$r->log_error("Error creating excel spreadsheet $filename: $!");
- $r->print('
'.&mt("Unable to create new Excel file. ".
- "This error has been logged. ".
- "Please alert your LON-CAPA administrator").
- '
');
+ $r->print(
+ ''
+ .&mt('Problems occurred in creating the new Excel file.')
+ .' '.&mt('This error has been logged.')
+ .' '.&mt('Please alert your LON-CAPA administrator.')
+ .'
'
+ );
return (undef);
}
#
@@ -1762,9 +1765,13 @@ sub create_text_file {
$fh = Apache::File->new('>/home/httpd'.$filename);
if (! defined($fh)) {
$r->log_error("Couldn't open $filename for output $!");
- $r->print(&mt('Problems occurred in creating the output file. '
- .'This error has been logged. '
- .'Please alert your LON-CAPA administrator.'));
+ $r->print(
+ ''
+ .&mt('Problems occurred in creating the output file.')
+ .' '.&mt('This error has been logged.')
+ .' '.&mt('Please alert your LON-CAPA administrator.')
+ .'
'
+ );
}
return ($fh,$filename)
}
@@ -1877,7 +1884,7 @@ sub select_form {
$selectform.=
'&').'" '.
($key eq $def ? 'selected="selected" ' : '').
- ">".&mt($hash{$key})." \n";
+ ">".$hash{$key}."\n";
}
$selectform.="";
return $selectform;
@@ -3405,12 +3412,22 @@ sub get_previous_attempt {
}
$prevattempts=&start_data_table().&start_data_table_header_row();
$prevattempts.=''.&mt('History').' ';
+ my %typeparts;
+ my $showsurv=&Apache::lonnet::allowed('vas',$env{'request.course.id'});
foreach my $key (sort(keys(%lasthash))) {
my ($ign,@parts) = split(/\./,$key);
if ($#parts > 0) {
my $data=$parts[-1];
pop(@parts);
- $prevattempts.=''.&mt('Part ').join('.',@parts).' '.$data.' ';
+ if ($data eq 'type') {
+ unless ($showsurv) {
+ my $id = join(',',@parts);
+ $typeparts{$ign.'.'.$id} = $lasthash{$key};
+ }
+ delete($lasthash{$key});
+ } else {
+ $prevattempts.=''.&mt('Part ').join('.',@parts).' '.$data.' ';
+ }
} else {
if ($#parts == 0) {
$prevattempts.=''.$parts[0].' ';
@@ -3420,23 +3437,98 @@ sub get_previous_attempt {
}
}
$prevattempts.=&end_data_table_header_row();
+ my %lasthidden;
if ($getattempt eq '') {
for ($version=1;$version<=$returnhash{'version'};$version++) {
- $prevattempts.=&start_data_table_row().
- ''.&mt('Transaction [_1]',$version).' ';
- foreach my $key (sort(keys(%lasthash))) {
- my $value = &format_previous_attempt_value($key,
- $returnhash{$version.':'.$key});
- $prevattempts.=''.$value.' ';
- }
- $prevattempts.=&end_data_table_row();
+ my @hidden;
+ if (%typeparts) {
+ foreach my $id (keys(%typeparts)) {
+ if (($returnhash{$version.':'.$id.'.type'} eq 'anonsurvey') || ($returnhash{$version.':'.$id.'.type'} eq 'anonsurveycred')) {
+ push(@hidden,$id);
+ $lasthidden{$id} = 1;
+ } elsif ($lasthidden{$id}) {
+ if (exists($returnhash{$version.':'.$id.'.award'})) {
+ delete($lasthidden{$id});
+ }
+ }
+ }
+ }
+ $prevattempts.=&start_data_table_row().
+ ''.&mt('Transaction [_1]',$version).' ';
+ if (@hidden) {
+ foreach my $key (sort(keys(%lasthash))) {
+ my $hide;
+ foreach my $id (@hidden) {
+ if ($key =~ /^\Q$id\E/) {
+ $hide = 1;
+ last;
+ }
+ }
+ if ($hide) {
+ my ($id,$data) = ($key =~ /^(.+)\.([^.]+)$/);
+ if (($data eq 'award') || ($data eq 'awarddetail')) {
+ my $value = &format_previous_attempt_value($key,
+ $returnhash{$version.':'.$key});
+ $prevattempts.=''.$value.' ';
+ } else {
+ $prevattempts.=' ';
+ }
+ } else {
+ if ($key =~ /\./) {
+ my $value = &format_previous_attempt_value($key,
+ $returnhash{$version.':'.$key});
+ $prevattempts.=''.$value.' ';
+ } else {
+ $prevattempts.=' ';
+ }
+ }
+ }
+ } else {
+ foreach my $key (sort(keys(%lasthash))) {
+ my $value = &format_previous_attempt_value($key,
+ $returnhash{$version.':'.$key});
+ $prevattempts.=''.$value.' ';
+ }
+ }
+ $prevattempts.=&end_data_table_row();
}
}
+ my @currhidden = keys(%lasthidden);
$prevattempts.=&start_data_table_row().''.&mt('Current').' ';
foreach my $key (sort(keys(%lasthash))) {
- my $value = &format_previous_attempt_value($key,$lasthash{$key});
- if ($key =~/$regexp$/ && (defined &$gradesub)) {$value = &$gradesub($value)}
- $prevattempts.=''.$value.' ';
+ if (%typeparts) {
+ my $hidden;
+ foreach my $id (@currhidden) {
+ if ($key =~ /^\Q$id\E/) {
+ $hidden = 1;
+ last;
+ }
+ }
+ if ($hidden) {
+ my ($id,$data) = ($key =~ /^(.+)\.([^.]+)$/);
+ if (($data eq 'award') || ($data eq 'awarddetail')) {
+ my $value = &format_previous_attempt_value($key,$lasthash{$key});
+ if ($key =~/$regexp$/ && (defined &$gradesub)) {
+ $value = &$gradesub($value);
+ }
+ $prevattempts.=''.$value.' ';
+ } else {
+ $prevattempts.=' ';
+ }
+ } else {
+ my $value = &format_previous_attempt_value($key,$lasthash{$key});
+ if ($key =~/$regexp$/ && (defined &$gradesub)) {
+ $value = &$gradesub($value);
+ }
+ $prevattempts.=''.$value.' ';
+ }
+ } else {
+ my $value = &format_previous_attempt_value($key,$lasthash{$key});
+ if ($key =~/$regexp$/ && (defined &$gradesub)) {
+ $value = &$gradesub($value);
+ }
+ $prevattempts.=''.$value.' ';
+ }
}
$prevattempts.= &end_data_table_row().&end_data_table();
} else {
@@ -4367,18 +4459,30 @@ sub CSTR_pageheader {
} else {
$lastitem = $thisdisfn;
}
- return
+
+ my $output =
''
.&Apache::loncommon::help_open_menu('','',3,'Authoring') #FIXME: Broken? Where is it?
.''.&mt('Construction Space:').' '
.''
.&Apache::lonmenu::constspaceform()
.'
';
+
+ return $output;
}
###############################################
@@ -4503,9 +4607,8 @@ sub bodytag {
$env{'course.'.$env{'request.course.id'}.
'.domain'}.'/'})) {
my $cid = $env{'request.course.id'};
- $dc_info.= $cid.' '.$env{'course.'.$cid.'.internal.coursecode'};
+ $dc_info = $cid.' '.$env{'course.'.$cid.'.internal.coursecode'};
$dc_info =~ s/\s+$//;
- $dc_info = '('.$dc_info.')';
}
$role = '('.$role.') ' if $role;
@@ -4513,7 +4616,9 @@ sub bodytag {
if ($env{'environment.remote'} eq 'off') {
# No Remote
- if ($no_nav_bar) { return $bodytag; }
+ if ($no_nav_bar || $env{'form.inhibitmenu'} eq 'yes') {
+ return $bodytag;
+ }
if ($env{'request.state'} eq 'construct') { $forcereg=1; }
@@ -4521,27 +4626,42 @@ sub bodytag {
# $titleinfo = &CSTR_pageheader(); #FIXME: Will be removed once all scripts have their own calls
# }
- $bodytag .= qq|$name $role
- $realm $dc_info
| unless $env{'form.inhibitmenu'};
- if ( $env{'form.inhibitmenu'} eq 'yes'
- || $ENV{'REQUEST_URI'} eq '/adm/logout'
- || $env{'request.noversionuri'} =~ m{^/res/adm/pages/}) {
+ if ($env{'request.noversionuri'} =~ m{^/res/adm/pages/}) {
+ if ($dc_info) {
+ $dc_info = qq|$dc_info |;
+ }
+ $bodytag .= qq|$name $role
+ $realm $dc_info
|;
return $bodytag;
}
+ unless ($env{'request.symb'} =~ m/\.page___\d+___/) {
+ $bodytag .= qq|$name $role
|;
+ }
+
$bodytag .= Apache::lonhtmlcommon::scripttag(
Apache::lonmenu::utilityfunctions(), 'start');
$bodytag .= Apache::lonmenu::primary_menu();
+ if ($dc_info) {
+ $dc_info = &dc_courseid_toggle($dc_info);
+ }
+ $bodytag .= qq|$realm $dc_info
|;
+
#don't show menus for public users
if($env{'user.name'} ne 'public' && $env{'user.domain'} ne 'public'){
$bodytag .= Apache::lonmenu::secondary_menu();
$bodytag .= Apache::lonmenu::serverform();
- $bodytag .= Apache::lonhtmlcommon::scripttag('', 'end');
- $bodytag .= Apache::lonmenu::innerregister($forcereg) if $forcereg;
+ $bodytag .= Apache::lonhtmlcommon::scripttag('', 'end');
+ if ($env{'request.state'} eq 'construct') {
+ $bodytag .= &Apache::lonmenu::innerregister($forcereg,'',
+ $args->{'bread_crumbs'});
+ } elsif ($forcereg) {
+ $bodytag .= &Apache::lonmenu::innerregister($forcereg);
+ }
}else{
# this is to seperate menu from content when there's no secondary
# menu. Especially needed for public accessible ressources.
@@ -4549,8 +4669,6 @@ sub bodytag {
$bodytag .= Apache::lonhtmlcommon::scripttag('', 'end');
}
- #SD testing
- #$bodytag .= Apache::lonmenu::menubuttons($forcereg);
return $bodytag;
}
@@ -4567,12 +4685,15 @@ sub bodytag {
# Explicit link to get inline menu
my $menu= ($no_inline_link?''
:''.&mt('Switch to Inline Menu Mode').' ');
- $bodytag .= qq|$name $role
- $realm $dc_info
+
+ if ($dc_info) {
+ $dc_info = qq|($dc_info) |;
+ }
+
+ $bodytag .= qq|$name $role
| unless $env{'form.inhibitmenu'};
- #
+ $realm $dc_info
| unless $env{'form.inhibitmenu'};
return(<
@@ -4585,6 +4706,14 @@ $bodytag
ENDBODY
}
+sub dc_courseid_toggle {
+ my ($dc_info) = @_;
+ return ' '.
+ ''.
+ &mt('(More ...)').' '.
+ ''.$dc_info.'
';
+}
+
sub make_attr_string {
my ($register,$attr_ref) = @_;
@@ -4731,11 +4860,6 @@ body {
color:$font;
}
-a:link,
-a:visited {
- font-size:100%;
-}
-
a:focus {
color: red;
background: yellow;
@@ -4753,15 +4877,14 @@ form, .inline {
vertical-align:middle;
}
-/* just for tests */
.LC_400Box {
width:400px;
}
-/* end */
.LC_filename {
font-family: $mono;
white-space:pre;
+ font-size: 120%;
}
.LC_fileicon {
@@ -4852,9 +4975,7 @@ table.LC_pastsubmission {
margin: 2px;
}
-table#LC_top_nav,
-table#LC_menubuttons,
-table#LC_nav_location {
+table#LC_menubuttons {
width: 100%;
background: $pgbg;
border: 2px;
@@ -4872,7 +4993,7 @@ table#LC_title_bar {
}
table#LC_title_bar,
-table.LC_breadcrumbs,
+table.LC_breadcrumbs, /* obsolete? */
table#LC_title_bar.LC_with_remote {
width: 100%;
border-color: $pgbg;
@@ -4885,46 +5006,26 @@ table#LC_title_bar.LC_with_remote {
margin: 0;
}
-/* #SD START (work in progress)*/
-
-ul.LC_bct {
+ul.LC_breadcrumb_tools_outerlist {
margin: 0;
padding: 0;
+ position: relative;
+ list-style: none;
}
-ul.LC_bct ol {
+ul.LC_breadcrumb_tools_outerlist li {
display: inline;
}
-ul.LC_bct ul {
- display: inline;
- padding: 0;
-}
-ul.LC_bct li {
- list-style-type: none;
- display: inline;
-}
-
-ul.LC_breadcrumb_tools {
-}
-
-li.LC_breadcrumb_tools {
-}
-li.LC_breadcrumb_tools img{
- vertical-align: middle;
-}
-
-.LC_breadcrumb_tools_A {
- margin: 0 0 0 1em;
-}
-.LC_breadcrumb_tools_B {
- float: right;
- margin-top: 0.4em;
+.LC_breadcrumb_tools_navigation {
+ padding: 0;
+ margin: 0;
+ float: left;
}
-.LC_breadcrumb_tools_C {
- margin: 0 1em 0 0;
+.LC_breadcrumb_tools_tools {
+ padding: 0;
+ margin: 0;
float: right;
}
-/* #SD END */
table#LC_title_bar td {
background: $tabbg;
@@ -4934,41 +5035,6 @@ table#LC_menubuttons img {
border: none;
}
-table#LC_top_nav td {
- background: $tabbg;
- border: none;
- font-size: small;
- vertical-align:top;
- padding:2px 5px 2px 5px;
-}
-
-table#LC_top_nav td a,
-div#LC_top_nav a {
- color: $font;
-}
-
-table#LC_top_nav td.LC_top_nav_logo {
- background: $tabbg;
- text-align: left;
- white-space: nowrap;
- width: 31px;
-}
-
-table#LC_top_nav td.LC_top_nav_logo img {
- border: none;
- vertical-align: bottom;
-}
-
-table#LC_top_nav td.LC_top_nav_exit,
-table#LC_top_nav td.LC_top_nav_help {
- width: 2.0em;
-}
-
-table#LC_top_nav td.LC_top_nav_login {
- width: 4.0em;
- text-align: center;
-}
-
.LC_breadcrumbs_component {
float: right;
margin: 0 1em;
@@ -4981,10 +5047,6 @@ td.LC_table_cell_checkbox {
text-align: center;
}
-table#LC_mainmenu td.LC_mainmenu_column {
- vertical-align: top;
-}
-
.LC_fontsize_small {
font-size: 70%;
}
@@ -4994,9 +5056,7 @@ table#LC_mainmenu td.LC_mainmenu_column
background: $sidebg;
border-bottom: 1px solid $lg_border_color;
line-height: 2.5em;
- /* SD working here
- height: 2.5em;
- overflow: hidden; */
+ overflow: hidden;
margin: 0;
padding: 0;
}
@@ -5009,9 +5069,8 @@ table#LC_mainmenu td.LC_mainmenu_column
#LC_head_subbox {
clear:both;
background: #F8F8F8; /* $sidebg; */
- border-bottom: 1px solid $lg_border_color;
- margin: 0 0 10px 0;
- padding: 5px;
+ border: 1px solid $sidebg;
+ margin: 0 0 10px 0;
}
.LC_fontsize_medium {
@@ -5028,6 +5087,10 @@ table#LC_mainmenu td.LC_mainmenu_column
padding-left:3px;
}
+.LC_menubuttons_inline_text img{
+ vertical-align: middle;
+}
+
.LC_menubuttons_link {
text-decoration: none;
}
@@ -5047,13 +5110,7 @@ td.LC_menubuttons_text {
background: $tabbg;
}
-.LC_new_mail {
- background: $tabbg;
- font-weight: bold;
-}
-
-table.LC_data_table,
-table.LC_mail_list {
+table.LC_data_table {
border: 1px solid #000000;
border-collapse: separate;
border-spacing: 1px;
@@ -5079,9 +5136,16 @@ table.LC_nested {
width: 100%;
}
+.ui-accordion,
+.ui-accordion table.LC_data_table,
+.ui-accordion table.LC_nested_outer{
+ border: 0px;
+ border-spacing: 0px;
+ margin: 3px;
+}
+
table.LC_data_table tr th,
table.LC_calendar tr th,
-table.LC_mail_list tr th,
table.LC_prior_tries tr th,
table.LC_innerpickbox tr th {
font-weight: bold;
@@ -5134,13 +5198,20 @@ table.LC_data_table tr td.LC_leftcol_hea
table.LC_data_table tr.LC_empty_row td,
table.LC_nested tr.LC_empty_row td {
- background-color: #FFFFFF;
font-weight: bold;
font-style: italic;
text-align: center;
padding: 8px;
}
+table.LC_data_table tr.LC_empty_row td {
+ background-color: $sidebg;
+}
+
+table.LC_nested tr.LC_empty_row td {
+ background-color: #FFFFFF;
+}
+
table.LC_caption {
}
@@ -5188,6 +5259,22 @@ table.LC_nested tr td.LC_right_item {
text-align: right;
}
+.ui-accordion table.LC_nested tr.LC_odd_row td.LC_left_item,
+.ui-accordion table.LC_nested tr.LC_even_row td.LC_left_item {
+ text-align: right;
+ width: 40%;
+ padding-right:10px;
+ vertical-align: top;
+ padding: 5px;
+}
+
+.ui-accordion table.LC_nested tr.LC_odd_row td.LC_right_item,
+.ui-accordion table.LC_nested tr.LC_even_row td.LC_right_item {
+ text-align: left;
+ width: 60%;
+ padding: 2px 4px;
+}
+
table.LC_nested tr.LC_odd_row td {
background-color: #EEEEEE;
}
@@ -5208,6 +5295,7 @@ table.LC_createuser tr.LC_info_row td {
table.LC_calendar {
border: 1px solid #000000;
border-collapse: collapse;
+ width: 98%;
}
table.LC_calendar_pickdate {
@@ -5217,6 +5305,7 @@ table.LC_calendar_pickdate {
table.LC_calendar tr td {
border: 1px solid #000000;
vertical-align: top;
+ width: 14%;
}
table.LC_calendar tr td.LC_calendar_day_empty {
@@ -5227,43 +5316,43 @@ table.LC_calendar tr td.LC_calendar_day_
background-color: $data_table_highlight;
}
-table.LC_mail_list tr.LC_mail_new {
+table.LC_data_table tr td.LC_mail_new {
background-color: $mail_new;
}
-table.LC_mail_list tr.LC_mail_new:hover {
+table.LC_data_table tr.LC_mail_new:hover {
background-color: $mail_new_hover;
}
-table.LC_mail_list tr.LC_mail_even {
-}
-
-table.LC_mail_list tr.LC_mail_odd {
-}
-
-table.LC_mail_list tr.LC_mail_read {
+table.LC_data_table tr td.LC_mail_read {
background-color: $mail_read;
}
-table.LC_mail_list tr.LC_mail_read:hover {
+/*
+table.LC_data_table tr.LC_mail_read:hover {
background-color: $mail_read_hover;
}
+*/
-table.LC_mail_list tr.LC_mail_replied {
+table.LC_data_table tr td.LC_mail_replied {
background-color: $mail_replied;
}
-table.LC_mail_list tr.LC_mail_replied:hover {
+/*
+table.LC_data_table tr.LC_mail_replied:hover {
background-color: $mail_replied_hover;
}
+*/
-table.LC_mail_list tr.LC_mail_other {
+table.LC_data_table tr td.LC_mail_other {
background-color: $mail_other;
}
-table.LC_mail_list tr.LC_mail_other:hover {
+/*
+table.LC_data_table tr.LC_mail_other:hover {
background-color: $mail_other_hover;
}
+*/
table.LC_data_table tr > td.LC_browser_file,
table.LC_data_table tr > td.LC_browser_file_published {
@@ -5293,23 +5382,23 @@ table.LC_data_table tr > td.LC_roles_is
}
table.LC_data_table tr > td.LC_roles_future {
- background: #FFFF77;
+ border-right: 8px solid #FFFF77;
}
table.LC_data_table tr > td.LC_roles_will {
- background: #FFAA77;
+ border-right: 8px solid #FFAA77;
}
table.LC_data_table tr > td.LC_roles_expired {
- background: #FF7777;
+ border-right: 8px solid #FF7777;
}
table.LC_data_table tr > td.LC_roles_will_not {
- background: #AAFF77;
+ border-right: 8px solid #AAFF77;
}
table.LC_data_table tr > td.LC_roles_selected {
- background: #11CC55;
+ border-right: 8px solid #11CC55;
}
span.LC_current_location {
@@ -5520,19 +5609,17 @@ table.LC_notify_front_page td {
.LC_topic_bar {
font-weight: bold;
- width: 100%;
background: $tabbg;
- vertical-align: middle;
- margin: 2ex 0ex 2ex 0ex;
+ margin: 1em 0em 1em 2em;
padding: 3px;
+ font-size: 1.2em;
}
.LC_topic_bar span {
+ left: 0.5em;
+ position: absolute;
vertical-align: middle;
-}
-
-.LC_topic_bar img {
- vertical-align: bottom;
+ font-size: 1.2em;
}
table.LC_course_group_status {
@@ -5644,12 +5731,12 @@ span.LC_prior_string,
span.LC_prior_custom,
span.LC_prior_reaction,
span.LC_prior_math {
- font-family: monospace;
+ font-family: $mono;
white-space: pre;
}
span.LC_prior_string {
- font-family: monospace;
+ font-family: $mono;
white-space: pre;
}
@@ -5682,17 +5769,6 @@ span.LC_cusr_subheading {
font-size: 85%;
}
-table.LC_docs_documents {
- background: #BBBBBB;
- border-width: 0;
- border-collapse: collapse;
-}
-
-table.LC_docs_documents td.LC_docs_document {
- border: 2px solid black;
- padding: 4px;
-}
-
div.LC_docs_entry_move {
border: 1px solid #BBBBBB;
background: #DDDDDD;
@@ -5784,56 +5860,41 @@ div.LC_clear_float_footer {
}
div.LC_grade_show_user {
- margin-top: 20px;
- border: 1px solid black;
+/* border-left: 5px solid $sidebg; */
+ border-top: 5px solid #000000;
+ margin: 50px 0 0 0;
+ padding: 15px 0 5px 10px;
}
-div.LC_grade_user_name {
- background: #DDDDEE;
- border-bottom: 1px solid black;
- font-weight: bold;
- font-size: large;
+div.LC_grade_show_user_odd_row {
+/* border-left: 5px solid #000000; */
}
-div.LC_grade_show_user_odd_row div.LC_grade_user_name {
- background: #DDEEDD;
+div.LC_grade_show_user div.LC_Box {
+ margin-right: 50px;
}
-div.LC_grade_show_problem,
div.LC_grade_submissions,
div.LC_grade_message_center,
-div.LC_grade_info_links,
-div.LC_grade_assign {
+div.LC_grade_info_links {
margin: 5px;
width: 99%;
background: #FFFFFF;
}
-div.LC_grade_show_problem_header,
div.LC_grade_submissions_header,
-div.LC_grade_message_center_header,
-div.LC_grade_assign_header {
+div.LC_grade_message_center_header {
font-weight: bold;
font-size: large;
}
-div.LC_grade_show_problem_problem,
div.LC_grade_submissions_body,
-div.LC_grade_message_center_body,
-div.LC_grade_assign_body {
+div.LC_grade_message_center_body {
border: 1px solid black;
width: 99%;
background: #FFFFFF;
}
-span.LC_grade_check_note {
- font-weight: normal;
- font-size: medium;
- display: inline;
- position: absolute;
- right: 1em;
-}
-
table.LC_scantron_action {
width: 100%;
}
@@ -5867,15 +5928,8 @@ div.LC_edit_problem_header_title {
}
table.LC_edit_problem_header_title {
- font-size: larger;
- font-weight: bold;
width: 100%;
- border-color: $pgbg;
- border-style: solid;
- border-width: $border;
background: $tabbg;
- border-collapse: collapse;
- padding: 0;
}
div.LC_edit_problem_discards {
@@ -5893,33 +5947,20 @@ img.stift {
vertical-align: middle;
}
-table#LC_mainmenu {
- margin-top:10px;
- width:80%;
-}
-
-table#LC_mainmenu td.LC_mainmenu_col_fieldset {
+table td.LC_mainmenu_col_fieldset {
vertical-align: top;
- width: 45%;
-}
-
-.LC_mainmenu_fieldset_category {
- color: $font;
- background: $pgbg;
- font-size: small;
- font-weight: bold;
}
div.LC_createcourse {
margin: 10px 10px 10px 10px;
}
-/* ---- Remove when done ----
-# The following styles is part of the redesign of LON-CAPA and are
-# subject to change during this project.
-# Don't rely on their current functionality as they might be
-# changed or removed.
-# --------------------------*/
+.LC_dccid {
+ margin: 0.2em 0 0 0;
+ padding: 0;
+ font-size: 90%;
+ display:none;
+}
a:hover,
ol.LC_primary_menu a:hover,
@@ -5963,12 +6004,6 @@ h6 {
border: 0;
}
-.LC_Right {
- float: right;
- margin: 0;
- padding: 0;
-}
-
.LC_FormSectionClearButton input {
background-color:transparent;
border: none;
@@ -6001,7 +6036,14 @@ fieldset > legend {
#LC_nav_bar {
float: left;
+ margin: 0;
+}
+
+#LC_realm {
margin: 0.2em 0 0 0;
+ padding: 0;
+ font-weight: bold;
+ text-align: center;
}
#LC_nav_bar em {
@@ -6011,7 +6053,12 @@ fieldset > legend {
ol.LC_primary_menu {
float: right;
- margin: 0.2em 0 0 0;
+ margin: 0;
+}
+
+span.LC_new_message{
+ font-weight:bold;
+ color: darkred;
}
ol#LC_PathBreadcrumbs {
@@ -6026,10 +6073,10 @@ ol.LC_primary_menu li {
ol.LC_primary_menu li img {
vertical-align: bottom;
+ height: 1.1em;
}
ol.LC_primary_menu a {
- font-size: 90%;
color: RGB(80, 80, 80);
text-decoration: none;
}
@@ -6167,18 +6214,14 @@ ol#LC_MenuBreadcrumbs,
ol#LC_PathBreadcrumbs {
padding-left: 10px;
margin: 0;
- list-style-position: inside;
- /* SD working here
- white-space: nowrap; */
+ height: 2.5em; /* equal to #LC_breadcrumbs line-height */
}
ol#LC_MenuBreadcrumbs li,
ol#LC_PathBreadcrumbs li,
ul.LC_CourseBreadcrumbs li {
display: inline;
- white-space: nowrap;
- /* SD working here
- white-space: normal; */
+ white-space: normal;
}
ol#LC_MenuBreadcrumbs li a,
@@ -6219,7 +6262,6 @@ dl.LC_ListStyleClean dd {
.LC_ListStyleClean,
.LC_ListStyleSimple,
.LC_ListStyleNormal,
-.LC_ListStyle_Border,
.LC_ListStyleSpecial {
/* display:block; */
list-style-position: inside;
@@ -6354,11 +6396,6 @@ table.LC_tableOfContent a {
text-decoration: none;
}
-table.LC_tableBrowseRes tr.LC_trOdd,
-table.LC_tableOfContent tr.LC_trOdd {
- background-color: #EEEEEE;
-}
-
table.LC_tableOfContent img {
border: none;
height: 1.3em;
@@ -6432,13 +6469,41 @@ a.LC_toolbarItem {
background-color:transparent;
}
+ul.LC_funclist {
+ margin: 0;
+ padding: 0.5em 1em 0.5em 0;
+}
+
+ul.LC_funclist > li:first-child {
+ font-weight:bold;
+ margin-left:0.8em;
+}
+
+ul.LC_funclist + ul.LC_funclist {
+ /*
+ left border as a seperator if we have more than
+ one list
+ */
+ border-left: 1px solid $sidebg;
+ /*
+ this hides the left border behind the border of the
+ outer box if element is wrapped to the next 'line'
+ */
+ margin-left: -1px;
+}
+
ul.LC_funclist li {
- float: left;
+ display: inline;
white-space: nowrap;
- height: 35px; /* at least as high as heighest list item */
- margin: 0 15px 15px 10px;
+ margin: 0 0 0 25px;
+ line-height: 150%;
}
+.ui-accordion .LC_advanced_toggle {
+ float: right;
+ font-size: 90%;
+ padding: 0px 4px
+}
END
}
@@ -6715,6 +6780,11 @@ sub start_page {
# Don't add anything more if only_body wanted
return $result if $args->{'only_body'};
+ #Breadcrumbs for Construction Space provided by &bodytag.
+ if (($env{'environment.remote'} eq 'off') && ($env{'request.state'} eq 'construct')) {
+ return $result;
+ }
+
#Breadcrumbs
if (exists($args->{'bread_crumbs'}) or exists($args->{'bread_crumbs_component'})) {
&Apache::lonhtmlcommon::clear_breadcrumbs();
@@ -9593,6 +9663,8 @@ sub extract_categories {
my $trailstr;
if ($name eq 'instcode') {
$trailstr = &mt('Official courses (with institutional codes)');
+ } elsif ($name eq 'communities') {
+ $trailstr = &mt('Communities');
} else {
$trailstr = $name;
}
@@ -9705,12 +9777,14 @@ cathash - reference to hash of categorie
currcat - scalar with an & separated list of categories assigned to a course.
+type - scalar contains course type (Course or Community).
+
Returns: $output (markup to be displayed)
=cut
sub assign_categories_table {
- my ($cathash,$currcat) = @_;
+ my ($cathash,$currcat,$type) = @_;
my $output;
if (ref($cathash) eq 'HASH') {
my (@cats,@trails,%allitems,%idx,@jsarray,@path,$maxdepth);
@@ -9719,15 +9793,20 @@ sub assign_categories_table {
if (@cats > 0) {
my $itemcount = 0;
if (ref($cats[0]) eq 'ARRAY') {
- $output = &Apache::loncommon::start_data_table();
my @currcategories;
if ($currcat ne '') {
@currcategories = split('&',$currcat);
}
+ my $table;
for (my $i=0; $i<@{$cats[0]}; $i++) {
my $parent = $cats[0][$i];
- my $css_class = $itemcount%2?' class="LC_odd_row"':'';
next if ($parent eq 'instcode');
+ if ($type eq 'Community') {
+ next unless ($parent eq 'communities');
+ } else {
+ next if ($parent eq 'communities');
+ }
+ my $css_class = $itemcount%2?' class="LC_odd_row"':'';
my $item = &escape($parent).'::0';
my $checked = '';
if (@currcategories > 0) {
@@ -9735,18 +9814,26 @@ sub assign_categories_table {
$checked = ' checked="checked"';
}
}
- $output .= ''.
- ' '.$parent.' '.
- ' ';
+ my $parent_title = $parent;
+ if ($parent eq 'communities') {
+ $parent_title = &mt('Communities');
+ }
+ $table .= ''.
+ ' '.$parent_title.' '.
+ ' ';
my $depth = 1;
push(@path,$parent);
- $output .= &assign_category_rows($itemcount,\@cats,$depth,$parent,\@path,\@currcategories);
+ $table .= &assign_category_rows($itemcount,\@cats,$depth,$parent,\@path,\@currcategories);
pop(@path);
- $output .= ' ';
+ $table .= ' ';
$itemcount ++;
}
- $output .= &Apache::loncommon::end_data_table();
+ if ($itemcount) {
+ $output = &Apache::loncommon::start_data_table().
+ $table.
+ &Apache::loncommon::end_data_table();
+ }
}
}
}
@@ -9991,19 +10078,19 @@ sub check_clone {
my $clonehome=&Apache::lonnet::homeserver($clonecrsunum,$clonecrsudom);
my $clonemsg;
my $can_clone = 0;
- my $lctype = lc($args->{'type'});
+ my $lctype = lc($args->{'crstype'});
if ($lctype ne 'community') {
$lctype = 'course';
}
if ($clonehome eq 'no_host') {
- if ($args->{'type'} eq 'Community') {
+ if ($args->{'crstype'} eq 'Community') {
$clonemsg = &mt('No new community created.').$linefeed.&mt('A new community could not be cloned from the specified original - [_1] - because it is a non-existent community.',$args->{'clonecourse'}.':'.$args->{'clonedomain'});
} else {
$clonemsg = &mt('No new course created.').$linefeed.&mt('A new course could not be cloned from the specified original - [_1] - because it is a non-existent course.',$args->{'clonecourse'}.':'.$args->{'clonedomain'});
}
} else {
my %clonedesc = &Apache::lonnet::coursedescription($cloneid,{'one_time' => 1});
- if ($args->{'type'} eq 'Community') {
+ if ($args->{'crstype'} eq 'Community') {
if ($clonedesc{'type'} ne 'Community') {
$clonemsg = &mt('No new community created.').$linefeed.&mt('A new community could not be cloned from the specified original - [_1] - because it is a course not a community.',$args->{'clonecourse'}.':'.$args->{'clonedomain'});
return ($can_clone, $clonemsg, $cloneid, $clonehome);
@@ -10022,7 +10109,7 @@ sub check_clone {
$can_clone = 1;
} else {
my $ccrole = 'cc';
- if ($args->{'type'} eq 'Community') {
+ if ($args->{'crstype'} eq 'Community') {
$ccrole = 'co';
}
my %roleshash =
@@ -10031,9 +10118,11 @@ sub check_clone {
'userroles',['active'],[$ccrole],
[$args->{'clonedomain'}]);
if (($roleshash{$args->{'clonecourse'}.':'.$args->{'clonedomain'}.':'.$ccrole}) || (grep(/^\Q$args->{'ccuname'}\E:\Q$args->{'ccdomain'}\E$/,@cloners))) {
- $can_clone = 1;
- } else {
- if ($args->{'type'} eq 'Community') {
+ $can_clone = 1;
+ } elsif (&Apache::lonnet::is_course_owner($args->{'clonedomain'},$args->{'clonecourse'},$args->{'ccuname'},$args->{'ccdomain'})) {
+ $can_clone = 1;
+ } else {
+ if ($args->{'crstype'} eq 'Community') {
$clonemsg = &mt('No new community created.').$linefeed.&mt('The new community could not be cloned from the existing community because the new community owner ([_1]) does not have cloning rights in the existing community ([_2]).',$args->{'ccuname'}.':'.$args->{'ccdomain'},$clonedesc{'description'});
} else {
$clonemsg = &mt('No new course created.').$linefeed.&mt('The new course could not be cloned from the existing course because the new course owner ([_1]) does not have cloning rights in the existing course ([_2]).',$args->{'ccuname'}.':'.$args->{'ccdomain'},$clonedesc{'description'});
@@ -10092,11 +10181,19 @@ sub construct_course {
# if anyone ever decides to not show this, and Utils::Course::new
# will need to be suitably modified.
$outcome .= &mt('New LON-CAPA [_1] ID: [_2]',$crstype,$$courseid).$linefeed;
+ if ($$courseid =~ /^error:/) {
+ return (0,$outcome);
+ }
+
#
# Check if created correctly
#
($$crsudom,$$crsunum)= &LONCAPA::split_courseid($$courseid);
my $crsuhome=&Apache::lonnet::homeserver($$crsunum,$$crsudom);
+ if ($crsuhome eq 'no_host') {
+ $outcome .= &mt('Course creation failed, unrecognized course home server.').$linefeed;
+ return (0,$outcome);
+ }
$outcome .= &mt('Created on').': '.$crsuhome.$linefeed;
#