Commit 607b99de by Calen Pennington

Make separate links for lms_preview and lms as needed

parent d10f56dd
from django.conf import settings from django.conf import settings
from xmodule.modulestore import Location from xmodule.modulestore import Location
from xmodule.modulestore.django import modulestore from xmodule.modulestore.django import modulestore
from xmodule.modulestore.draft import DRAFT
from xmodule.modulestore.exceptions import ItemNotFoundError from xmodule.modulestore.exceptions import ItemNotFoundError
...@@ -35,13 +34,14 @@ def get_course_location_for_item(location): ...@@ -35,13 +34,14 @@ def get_course_location_for_item(location):
return location return location
def get_lms_link_for_item(location): def get_lms_link_for_item(location, preview=False):
location = Location(location) location = Location(location)
if settings.LMS_BASE is not None: if settings.LMS_BASE is not None:
lms_link = "{lms_base}/courses/{course_id}/jump_to/{location}".format( lms_link = "//{preview}{lms_base}/courses/{course_id}/jump_to/{location}".format(
preview='preview.' if preview else '',
lms_base=settings.LMS_BASE, lms_base=settings.LMS_BASE,
# TODO: These will need to be changed to point to the particular instance of this problem in the particular course # TODO: These will need to be changed to point to the particular instance of this problem in the particular course
course_id = modulestore().get_containing_courses(location)[0].id, course_id=modulestore().get_containing_courses(location)[0].id,
location=location, location=location,
) )
else: else:
......
...@@ -188,6 +188,7 @@ def edit_subsection(request, location): ...@@ -188,6 +188,7 @@ def edit_subsection(request, location):
break break
lms_link = get_lms_link_for_item(location) lms_link = get_lms_link_for_item(location)
preview_link = get_lms_link_for_item(location, preview=True)
# make sure that location references a 'sequential', otherwise return BadRequest # make sure that location references a 'sequential', otherwise return BadRequest
if item.location.category != 'sequential': if item.location.category != 'sequential':
...@@ -214,7 +215,8 @@ def edit_subsection(request, location): ...@@ -214,7 +215,8 @@ def edit_subsection(request, location):
'context_course': course, 'context_course': course,
'create_new_unit_template': Location('i4x', 'edx', 'templates', 'vertical', 'Empty'), 'create_new_unit_template': Location('i4x', 'edx', 'templates', 'vertical', 'Empty'),
'lms_link': lms_link, 'lms_link': lms_link,
'parent_item' : parent, 'preview_link': preview_link,
'parent_item': parent,
'policy_metadata' : policy_metadata 'policy_metadata' : policy_metadata
}) })
...@@ -240,8 +242,8 @@ def edit_unit(request, location): ...@@ -240,8 +242,8 @@ def edit_unit(request, location):
course.location.course == item.location.course): course.location.course == item.location.course):
break break
# The non-draft location lms_link = get_lms_link_for_item(item.location)
lms_link = get_lms_link_for_item(item.location._replace(revision=None)) preview_lms_link = get_lms_link_for_item(item.location, preview=True)
component_templates = defaultdict(list) component_templates = defaultdict(list)
...@@ -282,7 +284,7 @@ def edit_unit(request, location): ...@@ -282,7 +284,7 @@ def edit_unit(request, location):
'unit_location': location, 'unit_location': location,
'components': components, 'components': components,
'component_templates': component_templates, 'component_templates': component_templates,
'draft_preview_link': lms_link, 'draft_preview_link': preview_lms_link,
'published_preview_link': lms_link, 'published_preview_link': lms_link,
'subsection': containing_subsection, 'subsection': containing_subsection,
'section': containing_section, 'section': containing_section,
......
...@@ -53,7 +53,7 @@ DATABASES = { ...@@ -53,7 +53,7 @@ DATABASES = {
} }
} }
LMS_BASE = "http://localhost:8000" LMS_BASE = "localhost:8000"
REPOS = { REPOS = {
'edx4edx': { 'edx4edx': {
......
...@@ -310,7 +310,7 @@ ...@@ -310,7 +310,7 @@
} }
} }
.preview-button { .preview-button, .view-button {
@include white-button; @include white-button;
margin-bottom: 10px; margin-bottom: 10px;
} }
...@@ -325,7 +325,8 @@ ...@@ -325,7 +325,8 @@
.save-button, .save-button,
.preview-button, .preview-button,
.publish-button { .publish-button,
.view-button {
font-size: 11px; font-size: 11px;
margin-top: 10px; margin-top: 10px;
padding: 6px 15px 8px; padding: 6px 15px 8px;
...@@ -427,17 +428,15 @@ ...@@ -427,17 +428,15 @@
} }
.edit-state-draft { .edit-state-draft {
.visibility { .visibility,
.edit-draft-message,
.view-button {
display: none; display: none;
} }
.published-alert { .published-alert {
display: block; display: block;
} }
.edit-draft-message {
display: none;
}
} }
.edit-state-public { .edit-state-public {
...@@ -446,7 +445,8 @@ ...@@ -446,7 +445,8 @@
.component-actions, .component-actions,
.new-component-item, .new-component-item,
#published-alert, #published-alert,
.publish-draft-message { .publish-draft-message,
.preview-button {
display: none; display: none;
} }
...@@ -463,7 +463,8 @@ ...@@ -463,7 +463,8 @@
#delete-draft, #delete-draft,
#publish-draft, #publish-draft,
#published-alert, #published-alert,
#create-draft, { #create-draft,
.view-button {
display: none; display: none;
} }
} }
...@@ -19,31 +19,31 @@ ...@@ -19,31 +19,31 @@
<div class="inner-wrapper"> <div class="inner-wrapper">
<div class="main-column"> <div class="main-column">
<article class="subsection-body window"> <article class="subsection-body window">
<div class="subsection-name-input"> <div class="subsection-name-input">
<label>Display Name:</label> <label>Display Name:</label>
<input type="text" value="${subsection.metadata['display_name']}" class="subsection-display-name-input" data-metadata-name="display_name"/> <input type="text" value="${subsection.metadata['display_name']}" class="subsection-display-name-input" data-metadata-name="display_name"/>
</div> </div>
<div> <div>
<label>Format:</label> <label>Format:</label>
<input type="text" value="${subsection.metadata['format'] if 'format' in subsection.metadata else ''}" class="unit-subtitle" data-metadata-name="format"/> <input type="text" value="${subsection.metadata['format'] if 'format' in subsection.metadata else ''}" class="unit-subtitle" data-metadata-name="format"/>
</div> </div>
<div class="unit-list"> <div class="unit-list">
<label>Units:</label> <label>Units:</label>
${units.enum_units(subsection)} ${units.enum_units(subsection)}
</div> </div>
<div> <div>
<label>Policy:</label> <label>Policy:</label>
<ol class='policy-list'> <ol class='policy-list'>
% for policy_name in policy_metadata.keys(): % for policy_name in policy_metadata.keys():
<li class="policy-list-element"> <li class="policy-list-element">
<input type="text" class="policy-list-name" name="${policy_name}" value="${policy_name}" disabled size="15"/>:&nbsp;<input type="text" class="policy-list-value" name="${policy_metadata[policy_name]}" value="${policy_metadata[policy_name]}" size="40"/><a href="#" class="delete-icon remove-policy-data"></a> <input type="text" class="policy-list-name" name="${policy_name}" value="${policy_name}" disabled size="15"/>:&nbsp;<input type="text" class="policy-list-value" name="${policy_metadata[policy_name]}" value="${policy_metadata[policy_name]}" size="40"/><a href="#" class="delete-icon remove-policy-data"></a>
</li> </li>
% endfor % endfor
<a href="#" class="new-policy-item add-policy-data"> <a href="#" class="new-policy-item add-policy-data">
<span class="plus-icon-small"></span>New Policy Data <span class="plus-icon-small"></span>New Policy Data
</a> </a>
</ol> </ol>
</div> </div>
</article> </article>
</div> </div>
...@@ -51,46 +51,47 @@ ...@@ -51,46 +51,47 @@
</div> </div>
<div id="add-new-policy-element-template" style="display:none"> <div id="add-new-policy-element-template" style="display:none">
<li class="policy-list-element new-policy-list-element"><input type="text" class="policy-list-name" autocomplete="off" size="15"/>:&nbsp;<input type="text" class="policy-list-value" size=40 autocomplete="off"/><a href="#" class="delete-icon remove-policy-data"></a></li> <li class="policy-list-element new-policy-list-element"><input type="text" class="policy-list-name" autocomplete="off" size="15"/>:&nbsp;<input type="text" class="policy-list-value" size=40 autocomplete="off"/><a href="#" class="delete-icon remove-policy-data"></a></li>
</div> </div>
<div class="sidebar"> <div class="sidebar">
<div class="unit-properties window"> <div class="unit-properties window">
<h4>Subsection Settings</h4> <h4>Subsection Settings</h4>
<div class="window-contents"> <div class="window-contents">
<div class="scheduled-date-input row"> <div class="scheduled-date-input row">
<label>Release date:<!-- <span class="description">Determines when this subsection and the units within it will be released publicly.</span>--></label> <label>Release date:<!-- <span class="description">Determines when this subsection and the units within it will be released publicly.</span>--></label>
<div class="datepair" data-language="javascript"> <div class="datepair" data-language="javascript">
<% <%
start_date = datetime.fromtimestamp(mktime(subsection.start)) if subsection.start is not None else None start_date = datetime.fromtimestamp(mktime(subsection.start)) if subsection.start is not None else None
parent_start_date = datetime.fromtimestamp(mktime(parent_item.start)) if parent_item.start is not None else None parent_start_date = datetime.fromtimestamp(mktime(parent_item.start)) if parent_item.start is not None else None
%> %>
<input type="text" id="start_date" name="start_date" value="${start_date.strftime('%m/%d/%Y') if start_date is not None else ''}" placeholder="MM/DD/YYYY" class="date" size='15' autocomplete="off"/> <input type="text" id="start_date" name="start_date" value="${start_date.strftime('%m/%d/%Y') if start_date is not None else ''}" placeholder="MM/DD/YYYY" class="date" size='15' autocomplete="off"/>
<input type="text" id="start_time" name="start_time" value="${start_date.strftime('%H:%M') if start_date is not None else ''}" placeholder="HH:MM" class="time" size='10' autocomplete="off"/> <input type="text" id="start_time" name="start_time" value="${start_date.strftime('%H:%M') if start_date is not None else ''}" placeholder="HH:MM" class="time" size='10' autocomplete="off"/>
</div> </div>
% if subsection.start != parent_item.start and subsection.start: % if subsection.start != parent_item.start and subsection.start:
<p class="notice">The date above differs from the release date of ${parent_item.display_name} – ${parent_start_date.strftime('%m/%d/%Y')} at ${parent_start_date.strftime('%H:%M')}. <a href="#" class="sync-date">Sync to ${parent_item.display_name}.</a></p> <p class="notice">The date above differs from the release date of ${parent_item.display_name} – ${parent_start_date.strftime('%m/%d/%Y')} at ${parent_start_date.strftime('%H:%M')}. <a href="#" class="sync-date">Sync to ${parent_item.display_name}.</a></p>
% endif % endif
</div> </div>
<div class="due-date-input row"> <div class="due-date-input row">
<label>Due date:</label> <label>Due date:</label>
<a href="#" class="set-date">Set a due date</a> <a href="#" class="set-date">Set a due date</a>
<div class="datepair date-setter"> <div class="datepair date-setter">
<p class="date-description"> <p class="date-description">
<% <%
# due date uses it own formatting for stringifying the date. As with capa_module.py, there's a utility module available for us to use # due date uses it own formatting for stringifying the date. As with capa_module.py, there's a utility module available for us to use
due_date = dateutil.parser.parse(subsection.metadata.get('due')) if 'due' in subsection.metadata else None due_date = dateutil.parser.parse(subsection.metadata.get('due')) if 'due' in subsection.metadata else None
%> %>
<input type="text" id="due_date" name="due_date" value="${due_date.strftime('%m/%d/%Y') if due_date is not None else ''}" placeholder="MM/DD/YYYY" class="date" size='15' autocomplete="off"/> <input type="text" id="due_date" name="due_date" value="${due_date.strftime('%m/%d/%Y') if due_date is not None else ''}" placeholder="MM/DD/YYYY" class="date" size='15' autocomplete="off"/>
<input type="text" id="due_time" name="due_time" value="${due_date.strftime('%H:%M') if due_date is not None else ''}" placeholder="HH:MM" class="time" size='10' autocomplete="off"/> <input type="text" id="due_time" name="due_time" value="${due_date.strftime('%H:%M') if due_date is not None else ''}" placeholder="HH:MM" class="time" size='10' autocomplete="off"/>
<a href="#" class="remove-date">Remove due date</a> <a href="#" class="remove-date">Remove due date</a>
</p> </p>
</div> </div>
</div> </div>
<div class="row unit-actions"> <div class="row unit-actions">
<a href="#" class="save-button save-subsection" data-id="${subsection.location}">Save</a> <a href="#" class="save-button save-subsection" data-id="${subsection.location}">Save</a>
<a href="${lms_link}" target="_blank" class="preview-button">Preview</a> <a href="${preview_link}" target="_blank" class="preview-button">Preview Drafts</a>
</div> <a href="${lms_link}" target="_blank" class="preview-button">View Live</a>
</div>
</div> </div>
</div> </div>
</div> </div>
...@@ -103,13 +104,13 @@ ...@@ -103,13 +104,13 @@
<script src="${static.url('js/vendor/timepicker/datepair.js')}"></script> <script src="${static.url('js/vendor/timepicker/datepair.js')}"></script>
<script src="${static.url('js/vendor/date.js')}"></script> <script src="${static.url('js/vendor/date.js')}"></script>
<script type="text/javascript"> <script type="text/javascript">
$(document).ready(function() { $(document).ready(function() {
// expand the due-date area if the values are set // expand the due-date area if the values are set
if ($('#due_date').val() != '') { if ($('#due_date').val() != '') {
var $block = $('.set-date').closest('.due-date-input'); var $block = $('.set-date').closest('.due-date-input');
$('.set-date').hide(); $('.set-date').hide();
$block.find('.date-setter').show(); $block.find('.date-setter').show();
} }
}) })
</script> </script>
</%block> </%block>
...@@ -91,6 +91,7 @@ ...@@ -91,6 +91,7 @@
<a id="save-draft" href="#" class="save-button">Save Draft</a> <a id="save-draft" href="#" class="save-button">Save Draft</a>
<a id="delete-draft" href="#" class="save-button">Delete Draft</a> <a id="delete-draft" href="#" class="save-button">Delete Draft</a>
<a href="${draft_preview_link}" target="_blank" class="preview-button">Preview</a> <a href="${draft_preview_link}" target="_blank" class="preview-button">Preview</a>
<a href="${published_preview_link}" target="_blank" class="view-button">View Live</a>
</div> </div>
</div> </div>
</div> </div>
......
...@@ -13,7 +13,7 @@ ...@@ -13,7 +13,7 @@
<li><a href="${reverse('static_pages', kwargs=dict(org=ctx_loc.org, course=ctx_loc.course, coursename=ctx_loc.name))}" id='pages-tab'>Pages</a></li> <li><a href="${reverse('static_pages', kwargs=dict(org=ctx_loc.org, course=ctx_loc.course, coursename=ctx_loc.name))}" id='pages-tab'>Pages</a></li>
<li><a href="${reverse('asset_index', kwargs=dict(org=ctx_loc.org, course=ctx_loc.course, name=ctx_loc.name))}" id='assets-tab'>Assets</a></li> <li><a href="${reverse('asset_index', kwargs=dict(org=ctx_loc.org, course=ctx_loc.course, name=ctx_loc.name))}" id='assets-tab'>Assets</a></li>
<li><a href="${reverse('manage_users', kwargs=dict(location=ctx_loc))}" id='users-tab'>Users</a></li> <li><a href="${reverse('manage_users', kwargs=dict(location=ctx_loc))}" id='users-tab'>Users</a></li>
<li><a href="${reverse('import_course', kwargs=dict(org=ctx_loc.org, course=ctx_loc.course, name=ctx_loc.name))}" id='import-tab' class="wip-box">Import</a></li> <li><a href="${reverse('import_course', kwargs=dict(org=ctx_loc.org, course=ctx_loc.course, name=ctx_loc.name))}" id='import-tab'>Import</a></li>
</ul> </ul>
% endif % endif
</div> </div>
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment