diff --git a/main.html b/main.html index 67b6e3a849..89ee65876f 100644 --- a/main.html +++ b/main.html @@ -97,6 +97,7 @@ + diff --git a/profile.html b/profile.html index a126ad1fe9..5a753b914f 100644 --- a/profile.html +++ b/profile.html @@ -29,8 +29,9 @@ $(function() { loc=false; - $("#location_sub").html(''+ - ''); + $("#location_sub").html('
'+''+ + ''+'
'); + $("#change_loc_button").click(function() { $("#change_location").show(); @@ -50,8 +51,8 @@ $(function() { if(lang) { lang=false; - $("#language_sub").html(''+ - ''); + $("#language_sub").html('
'+''+ + ''+'
'); $("#change_lang_button").click(function() { $("#change_language").show(); postJSON('/change_setting', {'language':$("#id_lang_text").attr("value")}, function(json) { @@ -140,15 +141,13 @@ $(function() {
  • Forum name: ${username}
  • E-mail: ${email}
  • - Location:
    ${location}
    Change + Location:
    ${location}
    Edit
  • - Language:
    ${language}
    Change + Language:
    ${language}
    Edit
  • - -

    Password change

    We'll e-mail a password reset link to ${email}.

    diff --git a/profile_graphs.js b/profile_graphs.js index dbe5dc1f96..72a3de4471 100644 --- a/profile_graphs.js +++ b/profile_graphs.js @@ -18,100 +18,103 @@ $(function () { } /* -------------------------------- Grade detail bars -------------------------------- */ - var colors = [ $.color.parse("#b72121"), $.color.parse("#600101"), $.color.parse("#666666"), $.color.parse("#333333")]; - // var colors = [ $.color.parse("#2e80ce"), $.color.parse("#14518b"), $.color.parse("#599535"), $.color.parse("#3d731c")]; - // var colors = [ $.color.parse("#3f80be"), $.color.parse("#128251"), $.color.parse("#e1b900"), $.color.parse("#d10404")]; - //var colors = [$.color.parse("#1B2045"), $.color.parse("#557a00"), $.color.parse("#F5600"), $.color.parse("#FEBA2C")]; - //var colors = [$.color.parse("#E7C856"), $.color.parse("#CD462E"), $.color.parse("#B01732"), $.color.parse("#41192A")]; - //var colors = [$.color.parse("#434F5E"), $.color.parse("#BEF731"), $.color.parse("#FB5455"), $.color.parse("#44C4B7")]; - //var colors = [$.color.parse("#147A7D"), $.color.parse("#C0C900"), $.color.parse("#C9005B"), $.color.parse("#FCF9A5")]; - - - - var series = []; - var ticks = []; //These are the indices and x-axis labels for the data - var bottomTicks = []; //Labels on the bottom - var detail_tooltips = {}; //This an dictionary mapping from 'section' -> array of detail_tooltips - var droppedScores = []; //These are the datapoints to indicate assignments which aren't factored into the total score - detail_tooltips['Dropped Scores'] = []; + <% + colors = ["#b72121", "#600101", "#666666", "#333333"] + tickIndex = 1 sectionSpacer = 0.5 sectionIndex = 0 - %> - %for section in grade_summary: - %if 'subscores' in section: ##This is for sections like labs or homeworks, with several smaller components and a total - series.push({label: "${section['category']}", - data: ${ json.dumps( [[i + tickIndex, score['percentage']] for i,score in enumerate(section['subscores'])] ) }, - color: colors[${sectionIndex}].toString(), - }); - ticks = ticks.concat( ${ json.dumps( [[i + tickIndex, score['label'] ] for i,score in enumerate(section['subscores'])] ) } ); - bottomTicks.push( [ ${tickIndex + len(section['subscores'])/2}, "${section['category']}" ] ); - detail_tooltips["${section['category']}"] = ${ json.dumps([score['summary'] for score in section['subscores']] ) }; - - droppedScores = droppedScores.concat(${ json.dumps( [[tickIndex + index, 0.05] for index in section['dropped_indices']]) }); - <% dropExplanation = "The lowest {0} {1} scores are dropped".format( len(section['dropped_indices']), section['category'] ) %> - detail_tooltips['Dropped Scores'] = detail_tooltips['Dropped Scores'].concat( ${json.dumps( [dropExplanation] * len(section['dropped_indices']) )} ); - - <% tickIndex += len(section['subscores']) + sectionSpacer %> - - ##Now put on the aggregate score - series.push({label: "${section['category']} Total", - data: [[${tickIndex}, ${section['totalscore']['score']}]], - color: colors[${sectionIndex}].toString(), - }); - ticks = ticks.concat( [ [${tickIndex}, "${section['totallabel']}"] ] ); - detail_tooltips["${section['category']} Total"] = [ "${section['totalscore']['summary']}" ]; - <% tickIndex += 1 + sectionSpacer %> - - %else: ##This is for sections like midterm or final, which have no smaller components - series.push({label: "${section['category']}", - data: [[${tickIndex}, ${section['totalscore']['score']}]], - color: colors[${sectionIndex}].toString(), - }); - ticks = ticks.concat( [ [${tickIndex}," ${section['totallabel']}"] ] ); - - detail_tooltips["${section['category']}"] = [ "${section['totalscore']['summary']}" ]; - <% tickIndex += 1 + sectionSpacer %> - %endif - <%sectionIndex += 1 %> - %endfor - - //Alwasy be sure that one series has the xaxis set to 2, or the second xaxis labels won't show up - series.push( {label: 'Dropped Scores', data: droppedScores, points: {symbol: "cross", show: true, radius: 3}, bars: {show: false}, color: "#333"} ); - - - /* ----------------------------- Grade overviewew bar -------------------------*/ - <% + series = [] + ticks = [] #These are the indices and x-axis labels for the data + bottomTicks = [] #Labels on the bottom + detail_tooltips = {} #This an dictionary mapping from 'section' -> array of detail_tooltips + droppedScores = [] #These are the datapoints to indicate assignments which aren't factored into the total score + dropped_score_tooltips = [] + + for section in grade_summary: + if 'subscores' in section: ##This is for sections like labs or homeworks, with several smaller components and a total + series.append({ + 'label' : section['category'], + 'data' : [[i + tickIndex, score['percentage']] for i,score in enumerate(section['subscores'])], + 'color' : colors[sectionIndex] + }) + + ticks += [[i + tickIndex, score['label'] ] for i,score in enumerate(section['subscores'])] + bottomTicks.append( [tickIndex + len(section['subscores'])/2, section['category']] ) + detail_tooltips[ section['category'] ] = [score['summary'] for score in section['subscores']] + + droppedScores += [[tickIndex + index, 0.05] for index in section['dropped_indices']] + + dropExplanation = "The lowest {0} {1} scores are dropped".format( len(section['dropped_indices']), section['category'] ) + dropped_score_tooltips += [dropExplanation] * len(section['dropped_indices']) + + + tickIndex += len(section['subscores']) + sectionSpacer + + + category_total_label = section['category'] + " Total" + series.append({ + 'label' : category_total_label, + 'data' : [ [tickIndex, section['totalscore']['score']] ], + 'color' : colors[sectionIndex] + }) + + ticks.append( [tickIndex, section['totallabel']] ) + detail_tooltips[category_total_label] = [section['totalscore']['summary']] + else: + series.append({ + 'label' : section['category'], + 'data' : [ [tickIndex, section['totalscore']['score']] ], + 'color' : colors[sectionIndex] + }) + + ticks.append( [tickIndex, section['totallabel']] ) + detail_tooltips[section['category']] = [section['totalscore']['summary']] + + tickIndex += 1 + sectionSpacer + sectionIndex += 1 + + + detail_tooltips['Dropped Scores'] = dropped_score_tooltips + + ## ----------------------------- Grade overviewew bar ------------------------- ## totalWeight = 0.0 sectionIndex = 0 totalScore = 0.0 overviewBarX = tickIndex - %> - %for section in grade_summary: - <% - weighted_score = section['totalscore']['score'] * section['weight'] - summary_text = "{0} - {1:.1%} of a possible {2:.0%}".format(section['category'], weighted_score, section['weight']) - %> - %if section['totalscore']['score'] > 0: - series.push({label: "${section['category']} - Weighted", - data: [[${overviewBarX}, ${weighted_score}]], - color: colors[${sectionIndex}].toString(), - }); - %endif - detail_tooltips["${section['category']} - Weighted"] = [ "${summary_text}" ]; - <% - sectionIndex += 1 - totalWeight += section['weight'] - totalScore += section['totalscore']['score'] * section['weight'] - %> - %endfor - ticks = ticks.concat( [ [${overviewBarX}, "Total"] ] ); + for section in grade_summary: + weighted_score = section['totalscore']['score'] * section['weight'] + summary_text = "{0} - {1:.1%} of a possible {2:.0%}".format(section['category'], weighted_score, section['weight']) + + weighted_category_label = section['category'] + " - Weighted" + + if section['totalscore']['score'] > 0: + series.append({ + 'label' : weighted_category_label, + 'data' : [ [overviewBarX, weighted_score] ], + 'color' : colors[sectionIndex] + }) + + detail_tooltips[weighted_category_label] = [ summary_text ] + sectionIndex += 1 + totalWeight += section['weight'] + totalScore += section['totalscore']['score'] * section['weight'] + + ticks += [ [overviewBarX, "Total"] ] + tickIndex += 1 + sectionSpacer + %> - <% tickIndex += 1 + sectionSpacer %> + var series = ${ json.dumps(series) }; + var ticks = ${ json.dumps(ticks) }; + var bottomTicks = ${ json.dumps(bottomTicks) }; + var detail_tooltips = ${ json.dumps(detail_tooltips) }; + var droppedScores = ${ json.dumps(droppedScores) }; + //Alwasy be sure that one series has the xaxis set to 2, or the second xaxis labels won't show up + series.push( {label: 'Dropped Scores', data: droppedScores, points: {symbol: "cross", show: true, radius: 3}, bars: {show: false}, color: "#333"} ); var options = { series: {stack: true, @@ -131,28 +134,7 @@ $(function () { var o = plot.pointOffset({x: ${overviewBarX} , y: ${totalScore}}); $grade_detail_graph.append('
    ${"{totalscore:.0%}".format(totalscore=totalScore)}
    '); - - // //Rotate the x-axis labels - // var rotateValue = "rotate(-60deg)"; - // var rotateOrigin = "bottom left"; - // $("#grade-detail-graph .x1Axis .tickLabel").css( { - // '-webkit-transform': rotateValue, - // '-moz-transform': rotateValue, - // '-ms-transform': rotateValue, - // '-o-transform': rotateValue, - // 'transform': rotateValue, - // - // '-webkit-transform-origin': rotateOrigin, - // '-moz-transform-origin': rotateOrigin, - // '-ms-transform-origin': rotateOrigin, - // '-o-transform-origin': rotateOrigin, - // - // 'text-align' : 'left', - // }); } - - - var previousPoint = null; $("#grade-detail-graph").bind("plothover", function (event, pos, item) { diff --git a/sass/_profile.scss b/sass/_profile.scss index f696116ab8..3182d61b36 100644 --- a/sass/_profile.scss +++ b/sass/_profile.scss @@ -26,13 +26,26 @@ div.profile-wrapper { @include box-shadow(0 1px 0 #eee); padding: 7px lh(); border-bottom: 1px solid #d3d3d3; + position: relative; div#location_sub, div#language_sub { font-weight: bold; @include inline-block(); + form { + width: 100%; + } + input { - margin: lh(.5) 0; + + &[type="text"] { + margin: lh(.5) 0; + width: 100%; + @include box-sizing(border-box); + } + + &[type="input"]{ + } } &:empty { @@ -43,6 +56,19 @@ div.profile-wrapper { div#description { font-size: 12px; } + + a#change_language, a#change_location { + position: absolute; + top: 9px; + right: lh(.5); + text-transform: uppercase; + font-size: 12px; + color: #999; + + &:hover { + color: #555; + } + } } } diff --git a/sass/courseware/_courseware.scss b/sass/courseware/_courseware.scss index ec06c7e5a1..c5811bd993 100644 --- a/sass/courseware/_courseware.scss +++ b/sass/courseware/_courseware.scss @@ -173,6 +173,15 @@ div.course-wrapper { margin-left: lh(); } } + + div.staff_info { + white-space: pre-wrap; + border-top: 1px solid #ccc; + padding-top: lh(); + margin-top: lh(); + line-height: lh(); + font-family: Consolas, "Lucida Console", Monaco, "Courier New", Courier, monospace; + } } &.closed { diff --git a/sass/discussion/_answers.scss b/sass/discussion/_answers.scss index 6ceead2514..e677f90b3e 100644 --- a/sass/discussion/_answers.scss +++ b/sass/discussion/_answers.scss @@ -42,6 +42,16 @@ div.answer-block { padding-top: 20px; width: 100%; + div.official-stamp { + background: $mit-red; + color: #fff; + font-size: 12px; + margin-top: 10px; + padding: 2px 5px; + text-align: center; + margin-left: -1px; + } + img.answer-img-accept { margin: 10px 0px 10px 16px; } diff --git a/sass/discussion/_forms.scss b/sass/discussion/_forms.scss index aacae3662e..8f642706e0 100644 --- a/sass/discussion/_forms.scss +++ b/sass/discussion/_forms.scss @@ -129,3 +129,31 @@ form.question-form { margin-top: 10px; } } + +div#question-list { + background-color: rgba(255,255,255,0.95); + @include box-sizing(border-box); + margin-top: -15px; + max-width: 505px; + min-width: 300px; + overflow: hidden; + padding-left: 5px; + position: absolute; + width: 35%; + z-index: 9999; + + h2 { + text-transform: none; + padding: 8px 0; + border-bottom: 1px solid #eee; + margin: 0; + + span { + background: #eee; + color: #555; + padding: 2px 5px; + @include border-radius(2px); + margin-right: 5px; + } + } +} diff --git a/sass/discussion/_question-view.scss b/sass/discussion/_question-view.scss index ef025b5bcd..99f8ccce9c 100644 --- a/sass/discussion/_question-view.scss +++ b/sass/discussion/_question-view.scss @@ -181,6 +181,21 @@ div.question-header { &:first-child { border-top: 0; } + + &.official { + padding-top: 10px; + + span.official-comment { + background: $mit-red; + color: #fff; + display: block; + font-size: 12px; + margin: 0 0 10px -5%; + padding:2px 5px 2px 5%; + text-align: left; + width:100px; + } + } } form.post-comments { diff --git a/simplewiki_revision_feed.html b/simplewiki_revision_feed.html new file mode 100644 index 0000000000..b0196a4dab --- /dev/null +++ b/simplewiki_revision_feed.html @@ -0,0 +1,63 @@ +##This file is based on the template from the SimpleWiki source which carries the GPL license + +<%inherit file="simplewiki_base.html"/> + +<%block name="title">Revision feed - MITx 6.002x Wiki + +<%! + from django.core.urlresolvers import reverse +%> + +<%block name="wiki_page_title"> +

    Revision Feed - Page ${wiki_page}

    + + +<%block name="wiki_body"> + + + + + + + + + + + <% loopCount = 0 %> + %for revision in wiki_history: + %if revision.deleted < 2 or show_delete_revision: + <% loopCount += 1 %> + + + + + + + %endif + %endfor + + %if wiki_prev_page or wiki_next_page: + + + + + + %endif +
    RevisionCommentDiffModified
    + ${revision.article.title} - ${revision} + + ${ revision.revision_text if revision.revision_text else "None" } + %for x in revision.get_diff(): + ${x|h}
    + %endfor
    ${revision.get_user()} +
    + ${revision.revision_date.strftime("%b %d, %Y, %I:%M %p")} +
    + %if wiki_prev_page: + Previous page + %endif + %if wiki_next_page: + Next page + %endif +
    + diff --git a/video_init.js b/video_init.js index 63b7f055f4..adf0187ea9 100644 --- a/video_init.js +++ b/video_init.js @@ -30,14 +30,13 @@ function good() { ajax_video=good; -loadNewVideo(streams["1.0"], ${ position }); +// load the same video speed your last video was at in a sequence +// if the last speed played on video doesn't exist on another video just use 1.0 as default function add_speed(key, stream) { var id = 'speed_' + stream; - //TODO: this should be smarter and know which video is first selected when we have - // video speed as an option/parameter per user that is saved - if (key == 1.0) { + if (key == video_speed) { $("#video_speeds").append('
  • '+key+'x
  • '); } else { $("#video_speeds").append('
  • '+key+'x
  • '); @@ -64,9 +63,24 @@ function sort_by_value(a,b) { l.sort(sort_by_value); -for(var i=0; i