<%page expression_filter="h"/>
<%!
from django.utils.translation import ugettext as _

from openedx.core.djangolib.markup import HTML, Text
from openedx.core.djangolib.js_utils import (
      dump_js_escaped_json
  )
%>

<%inherit file="base.html" />
<%namespace name='static' file='static_content.html'/>
<%def name="online_help_token()"><% return "home" %></%def>
<%block name="title">${_("{studio_name} Home").format(studio_name=settings.STUDIO_SHORT_NAME)}</%block>
<%block name="bodyclass">is-signedin index view-dashboard</%block>

<%block name="requirejs">
  require(["js/factories/index"], function (IndexFactory) {
      IndexFactory();
  });
</%block>

<%block name="content">
<div class="wrapper-mast wrapper">
  <header class="mast has-actions">
    <h1 class="page-header">${_("{studio_name} Home").format(studio_name=settings.STUDIO_SHORT_NAME)}</h1>

    % if user.is_active:
    <nav class="nav-actions" aria-label="${_('Page Actions')}">
      <h3 class="sr">${_("Page Actions")}</h3>
      <ul>
        <li class="nav-item">
          % if course_creator_status=='granted':
          <a href="#" class="button new-button new-course-button"><span class="icon fa fa-plus icon-inline" aria-hidden="true"></span>
              ${_("New Course")}</a>
          % elif course_creator_status=='disallowed_for_this_site' and settings.FEATURES.get('STUDIO_REQUEST_EMAIL',''):
          <a href="mailto:${settings.FEATURES.get('STUDIO_REQUEST_EMAIL','')}">${_("Email staff to create course")}</a>
          % endif
          % if show_new_library_button:
            <a href="#" class="button new-button new-library-button"><span class="icon fa fa-plus icon-inline" aria-hidden="true"></span>
            ${_("New Library")}</a>
          % endif
        </li>
      </ul>
    </nav>
    % endif
  </header>
</div>

<div class="wrapper-content wrapper">
  % if user.is_active:
  <section class="content">
    <article class="content-primary" role="main">

      % if course_creator_status=='granted':
      <div class="wrapper-create-element wrapper-create-course">
        <form class="form-create create-course course-info" id="create-course-form" name="create-course-form">
          <div class="wrap-error">
            <div id="course_creation_error" name="course_creation_error" class="message message-status message-status error" role="alert">
            <p>${_("Please correct the highlighted fields below.")}</p>
            </div>
          </div>

          <div class="wrapper-form">
            <h3 class="title">${_("Create a New Course")}</h3>

            <fieldset>
              <legend class="sr">${_("Required Information to Create a New Course")}</legend>

              <ol class="list-input">
                <li class="field text required" id="field-course-name">
                  <label for="new-course-name">${_("Course Name")}</label>
                  ## Translators: This is an example name for a new course, seen when
                  ## filling out the form to create a new course.
                  <input class="new-course-name" id="new-course-name" type="text" name="new-course-name" required placeholder="${_('e.g. Introduction to Computer Science')}" aria-describedby="tip-new-course-name tip-error-new-course-name" />
                  <span class="tip" id="tip-new-course-name">${_("The public display name for your course. This cannot be changed, but you can set a different display name in Advanced Settings later.")}</span>
                  <span class="tip tip-error is-hiding" id="tip-error-new-course-name"></span>
                </li>
                <li class="field text required">
                  <label for="new-course-org">${_("Organization")}</label>
                  ## Translators: This is an example for the name of the organization sponsoring a course, seen when filling out the form to create a new course. The organization name cannot contain spaces.
                  ## Translators: "e.g. UniversityX or OrganizationX" is a placeholder displayed when user put no data into this field.
                  <input class="new-course-org" id="new-course-org" type="text" name="new-course-org" required placeholder="${_('e.g. UniversityX or OrganizationX')}" aria-describedby="tip-new-course-org tip-error-new-course-org" />
                  <span class="tip" id="tip-new-course-org">${Text(_("The name of the organization sponsoring the course. {strong_start}Note: The organization name is part of the course URL.{strong_end} This cannot be changed, but you can set a different display name in Advanced Settings later.")).format(
                      strong_start=HTML('<strong>'),
                      strong_end=HTML('</strong>'),
                  )}</span>
                  <span class="tip tip-error is-hiding" id="tip-error-new-course-org"></span>
                </li>

                <li class="field text required" id="field-course-number">
                  <label for="new-course-number">${_("Course Number")}</label>
                  ## Translators: This is an example for the number used to identify a course,
                  ## seen when filling out the form to create a new course. The number here is
                  ## short for "Computer Science 101". It can contain letters but cannot contain spaces.
                  <input class="new-course-number" id="new-course-number" type="text" name="new-course-number" required placeholder="${_('e.g. CS101')}" aria-describedby="tip-new-course-number tip-error-new-course-number" />
                  <span class="tip" id="tip-new-course-number">${Text(_("The unique number that identifies your course within your organization. {strong_start}Note: This is part of your course URL, so no spaces or special characters are allowed and it cannot be changed.{strong_end}")).format(
                      strong_start=HTML('<strong>'),
                      strong_end=HTML('</strong>'),
                  )}</span>
                  <span class="tip tip-error is-hiding" id="tip-error-new-course-number"></span>
                </li>

                <li class="field text required" id="field-course-run">
                  <label for="new-course-run">${_("Course Run")}</label>
                  ## Translators: This is an example for the "run" used to identify different
                  ## instances of a course, seen when filling out the form to create a new course.
                  <input class="new-course-run" id="new-course-run" type="text" name="new-course-run" required placeholder="${_('e.g. 2014_T1')}" aria-describedby="tip-new-course-run tip-error-new-course-run" />
                  <span class="tip" id="tip-new-course-run">${Text(_("The term in which your course will run. {strong_start}Note: This is part of your course URL, so no spaces or special characters are allowed and it cannot be changed.{strong_end}")).format(
                      strong_start=HTML('<strong>'),
                      strong_end=HTML('</strong>'),
                  )}</span>
                  <span class="tip tip-error is-hiding" id="tip-error-new-course-run"></span>
                </li>
              </ol>

            </fieldset>
          </div>

          <div class="actions">
            <input type="hidden" value="${allow_unicode_course_id}" class="allow-unicode-course-id" />
            <input type="submit" value="${_('Create')}" class="action action-primary new-course-save" />
            <input type="button" value="${_('Cancel')}" class="action action-secondary action-cancel new-course-cancel" />
          </div>
        </form>
      </div>

      % endif

      %if libraries_enabled and show_new_library_button:
      <div class="wrapper-create-element wrapper-create-library">
        <form class="form-create create-library library-info" id="create-library-form" name="create-library-form">
          <div class="wrap-error">
            <div id="library_creation_error" name="library_creation_error" class="message message-status message-status error" role="alert">
            <p>${_("Please correct the highlighted fields below.")}</p>
            </div>
          </div>

          <div class="wrapper-form">
            <h3 class="title">${_("Create a New Library")}</h3>

            <fieldset>
              <legend class="sr">${_("Required Information to Create a New Library")}</legend>

              <ol class="list-input">
                <li class="field text required" id="field-library-name">
                  <label for="new-library-name">${_("Library Name")}</label>
                  ## Translators: This is an example name for a new content library, seen when
                  ## filling out the form to create a new library.
                  ## (A library is a collection of content or problems.)
                  <input class="new-library-name" id="new-library-name" type="text" name="new-library-name" required placeholder="${_('e.g. Computer Science Problems')}" aria-describedby="tip-new-library-name tip-error-new-library-name" />
                  <span class="tip" id="tip-new-library-name">${_("The public display name for your library.")}</span>
                  <span class="tip tip-error is-hiding" id="tip-error-new-library-name"></span>
                </li>
                <li class="field text required">
                  <label for="new-library-org">${_("Organization")}</label>
                  <input class="new-library-org" id="new-library-org" type="text" name="new-library-org" required placeholder="${_('e.g. UniversityX or OrganizationX')}" aria-describedby="tip-new-library-org tip-error-new-library-org" />
                  <span class="tip" id="tip-new-library-org">${_("The public organization name for your library.")} ${_("This cannot be changed.")}</span>
                  <span class="tip tip-error is-hiding" id="tip-error-new-library-org"></span>
                </li>

                <li class="field text required" id="field-library-number">
                  <label for="new-library-number">${_("Library Code")}</label>
                  ## Translators: This is an example for the "code" used to identify a library,
                  ## seen when filling out the form to create a new library. This example is short
                  ## for "Computer Science Problems". The example number may contain letters
                  ## but must not contain spaces.
                  <input class="new-library-number" id="new-library-number" type="text" name="new-library-number" required placeholder="${_('e.g. CSPROB')}" aria-describedby="tip-new-library-number tip-error-new-library-number" />
                  <span class="tip" id="tip-new-library-number">${Text(_("The unique code that identifies this library. {strong_start}Note: This is part of your library URL, so no spaces or special characters are allowed.{strong_end} This cannot be changed.")).format(
                      strong_start=HTML('<strong>'),
                      strong_end=HTML('</strong>'),
                  )}</span>
                  <span class="tip tip-error is-hiding" id="tip-error-new-library-number"></span>
                </li>
              </ol>

            </fieldset>
          </div>

          <div class="actions">
            <input type="hidden" value="${allow_unicode_course_id}" class="allow-unicode-course-id" />
            <input type="submit" value="${_('Create')}" class="action action-primary new-library-save" />
            <input type="button" value="${_('Cancel')}" class="action action-secondary action-cancel new-library-cancel" />
          </div>
        </form>
      </div>
      % endif

      %if optimization_enabled:
      <div class="optimization-form">
        <h2 class="title title-3">${_("Organization and Library Settings")}</h2>
        <form class="form" action="/home/" method="GET">
          <fieldset class="form-group">
            <div class="field">
              <label class="field-label">${_("Show all courses in organization:")}
                <input class="field-input input-text" type="text" name="org"
                       placeholder="${_('For example, MITx')}"/>
              </label>
            </div>
          </fieldset>
          <div class="form-actions">
              <button class="btn-brand btn-base" type="submit">${_("Submit")}</button>
          </div>
        </form>
      </div>
      %endif

      <!-- STATE: processing courses -->
      %if allow_course_reruns and rerun_creator_status and len(in_process_course_actions) > 0:
      <div class="courses courses-processing">
          <h3 class="title">${_("Courses Being Processed")}</h3>

          <ul class="list-courses">
            %for course_info in sorted(in_process_course_actions, key=lambda s: s['display_name'].lower() if s['display_name'] is not None else ''):
            <!-- STATE: re-run is processing -->
            %if course_info['is_in_progress']:
            <li class="wrapper-course has-status" data-course-key="${course_info['course_key']}">
              <div class="course-item course-rerun is-processing">
                <div class="course-details" href="#">
                  <h3 class="course-title">${course_info['display_name']}</h3>

                  <div class="course-metadata">
                    <span class="course-org metadata-item">
                      <span class="label">${_("Organization:")}</span> <span class="value">${course_info['org']}</span>
                    </span>
                    <span class="course-num metadata-item">
                      <span class="label">${_("Course Number:")}</span>
                      <span class="value">${course_info['number']}</span>
                    </span>
                    <span class="course-run metadata-item">
                      <span class="label">${_("Course Run:")}</span> <span class="value">${course_info['run']}</span>
                    </span>
                  </div>
                </div>

                <dl class="course-status">
                  <dt class="label sr">${_("This course run is currently being created.")}</dt>
                  <dd class="value">
                    <span class="icon fa fa-refresh fa-spin" aria-hidden="true"></span>
                    ## Translators: This is a status message, used to inform the user of
                    ## what the system is doing. This status means that the user has
                    ## requested to re-run an existing course, and the system is currently
                    ## in the process of duplicating and configuring the existing course
                    ## so that it can be re-run.
                    <span class="copy">${_("Configuring as re-run")}</span>
                  </dd>
                </dl>
              </div>

              <div class="status-message">
                <p class="copy">${Text(_('The new course will be added to your course list in 5-10 minutes. Return to this page or {link_start}refresh it{link_end} to update the course list. The new course will need some manual configuration.')).format(
                    link_start=HTML('<a href="#" class="action-reload">'),
                    link_end=HTML('</a>'),
                  )}</p>
              </div>
            </li>
            %endif

            <!-- - - - -->

            <!-- STATE: re-run has error -->
            %if course_info['is_failed']:
            <li class="wrapper-course has-status" data-course-key="${course_info['course_key']}">
              <div class="course-item course-rerun has-error">
                <div class="course-details" href="#">
                  <h3 class="course-title">${course_info['display_name']}</h3>

                  <div class="course-metadata">
                    <span class="course-org metadata-item">
                      <span class="label">${_("Organization:")}</span> <span class="value">${course_info['org']}</span>
                    </span>
                    <span class="course-num metadata-item">
                      <span class="label">${_("Course Number:")}</span>
                      <span class="value">${course_info['number']}</span>
                    </span>
                    <span class="course-run metadata-item">
                      <span class="label">${_("Course Run:")}</span> <span class="value">${course_info['run']}</span>
                    </span>
                  </div>
                </div>

                <dl class="course-status">
                  ## Translators: This is a status message for the course re-runs feature.
                  ## When a course admin indicates that a course should be re-run, the system
                  ## needs to process the request and prepare the new course. The status of
                  ## the process will follow this text.
                  <dt class="label sr">${_("This re-run processing status:")}</dt>
                  <dd class="value">
                    <span class="icon fa fa-warning" aria-hidden="true"></span>
                    <span class="copy">${_("Configuration Error")}</span>
                  </dd>
                </dl>
              </div>

              <div class="status-message has-actions">
                <p class="copy">${_("A system error occurred while your course was being processed. Please go to the original course to try the re-run again, or contact your PM for assistance.")}</p>

                <ul  class="status-actions">
                  <li class="action action-dismiss">
                    <a href="#" class="button dismiss-button" data-dismiss-link="${course_info['dismiss_link']}">
                      <span class="icon fa fa-times-circle" aria-hidden="true"></span>
                      <span class="button-copy">${_("Dismiss")}</span>
                    </a>
                  </li>
                </ul>
              </div>
            </li>
            %endif
            %endfor
          </ul>
      </div>
      %endif

      % if libraries_enabled or archived_courses:
      <ul id="course-index-tabs">
        <li class="courses-tab active"><a>${_("Courses")}</a></li>
        % if archived_courses:
        <li class="archived-courses-tab"><a>${_("Archived Courses")}</a></li>
        % endif
        % if libraries_enabled:
        <li class="libraries-tab"><a>${_("Libraries")}</a></li>
        % endif
      </ul>
      % endif

      %if len(courses) > 0 or optimization_enabled:
      <div class="courses courses-tab react-course-listing active"></div>

      %else:
      <div class="notice notice-incontext notice-instruction notice-instruction-nocourses list-notices courses-tab active">
        <div class="notice-item">
          <div class="msg">
            <h3 class="title">${_("Are you staff on an existing {studio_name} course?").format(studio_name=settings.STUDIO_SHORT_NAME)}</h3>
            <div class="copy">
              <p>${_('The course creator must give you access to the course. Contact the course creator or administrator for the course you are helping to author.')}</p>
            </div>
          </div>
        </div>

        %if course_creator_status == "granted":
        <div class="notice-item has-actions">
          <div class="msg">
            <h3 class="title">${_('Create Your First Course')}</h3>
            <div class="copy">
              <p>${_('Your new course is just a click away!')}</p>
            </div>
          </div>

          <ul class="list-actions">
            <li class="action-item">
              <a href="#" class="action-primary action-create action-create-course new-course-button"><span class="icon fa fa-plus icon-inline" aria-hidden="true"></span> ${_('Create Your First Course')}</a>
            </li>
          </ul>
        </div>
        % endif

      </div>
      % endif


      %if course_creator_status == "unrequested":
      <div class="wrapper wrapper-creationrights">
        <h3 class="title">
          <a href="#instruction-creationrights" class="ui-toggle-control show-creationrights"><span class="label">${_('Becoming a Course Creator in {studio_name}').format(studio_name=settings.STUDIO_SHORT_NAME)}</span> <span class="icon fa fa-times-circle" aria-hidden="true"></span></a>
        </h3>

        <div class="notice notice-incontext notice-instruction notice-instruction-creationrights ui-toggle-target" id="instruction-creationrights">
          <div class="copy">
            <p>${_('{studio_name} is a hosted solution for our xConsortium partners and selected guests. Courses for which you are a team member appear above for you to edit, while course creator privileges are granted by {platform_name}. Our team will evaluate your request and provide you feedback within 24 hours during the work week.').format(
              studio_name=settings.STUDIO_NAME, platform_name=settings.PLATFORM_NAME)}</p>
          </div>

          <div class="status status-creationrights is-unrequested">
            <h4 class="title">${_('Your Course Creator Request Status:')}</h4>

            <form id="request-coursecreator" action="${request_course_creator_url}" method="post" enctype="multipart/form-data">
              <div class="form-actions">
                <button type="submit" id="request-coursecreator-submit" name="request-coursecreator-submit" class="action-primary action-request"><span class="icon fa fa-cog icon-inline fa fa-spin" aria-hidden="true"></span> <span class="label">${_('Request the Ability to Create Courses')}</span></button>
              </div>
            </form>
          </div>
        </div>
      </div>

      %elif course_creator_status == "denied":
      <div class="wrapper wrapper-creationrights is-shown">
        <h3 class="title">
          <a href="#instruction-creationrights" class="ui-toggle-control current show-creationrights"><span class="label">${_('Your Course Creator Request Status')}</span> <span class="icon fa fa-times-circle" aria-hidden="true"></span></a>
        </h3>

        <div class="notice notice-incontext notice-instruction notice-instruction-creationrights ui-toggle-target" id="instruction-creationrights">
          <div class="copy">
            <p>${_('{studio_name} is a hosted solution for our xConsortium partners and selected guests. Courses for which you are a team member appear above for you to edit, while course creator privileges are granted by {platform_name}. Our team is has completed evaluating your request.').format(
              studio_name=settings.STUDIO_NAME, platform_name=settings.PLATFORM_NAME,
            )}</p>
          </div>

          <div class="status status-creationrights has-status is-denied">
            <h4 class="title">${_('Your Course Creator Request Status:')}</h4>

            <dl class="status-update">
              <dt class="label">${_('Your Course Creator request is:')}</dt>
              <dd class="value">
                <span class="status-indicator"></span>
                <span class="value-formal">${_('Denied')}</span>
                <span class="value-description">${_('Your request did not meet the criteria/guidelines specified by {platform_name} Staff.').format(platform_name=settings.PLATFORM_NAME)}</span>
              </dd>
            </dl>
          </div>
        </div>
      </div>

      %elif course_creator_status == "pending":
      <div class="wrapper wrapper-creationrights is-shown">
        <h3 class="title">
          <a href="#instruction-creationrights" class="ui-toggle-control current show-creationrights"><span class="label">${_('Your Course Creator Request Status')}</span> <span class="icon fa fa-times-circle" aria-hidden="true"></span></a>
        </h3>

        <div class="notice notice-incontext notice-instruction notice-instruction-creationrights ui-toggle-target" id="instruction-creationrights">
          <div class="copy">
            <p>${_('{studio_name} is a hosted solution for our xConsortium partners and selected guests. Courses for which you are a team member appear above for you to edit, while course creator privileges are granted by {platform_name}. Our team is currently  evaluating your request.').format(
              studio_name=settings.STUDIO_NAME, platform_name=settings.PLATFORM_NAME,
            )}</p>
          </div>

          <div class="status status-creationrights has-status is-pending">
            <h4 class="title">${_('Your Course Creator Request Status:')}</h4>

            <dl class="status-update">
              <dt class="label">${_('Your Course Creator request is:')}</dt>
              <dd class="value">
                <span class="status-indicator"></span>
                <span class="value-formal">${_('Pending')}</span>
                <span class="value-description">
                  ${_('Your request is currently being reviewed by {platform_name} staff and should be updated shortly.').format(platform_name=settings.PLATFORM_NAME)}
                </span>
              </dd>
            </dl>
          </div>
        </div>
      </div>
      % endif

      %if archived_courses:
      <div class="archived-courses react-archived-course-listing archived-courses-tab"></div>
      %endif

      %if len(libraries) > 0 or optimization_enabled:
      <div class="libraries react-library-listing libraries-tab"></div>

      %else:
      <div class="notice notice-incontext notice-instruction notice-instruction-nocourses list-notices libraries-tab">
        <div class="notice-item">
          <div class="msg">
              <h3 class="title">${_("Were you expecting to see a particular library here?")}</h3>
              <div class="copy">
                  <p>${_('The library creator must give you access to the library. Contact the library creator or administrator for the library you are helping to author.')}</p>
              </div>
          </div>
        </div>
        % if show_new_library_button:
        <div class="notice-item has-actions">
          <div class="msg">
              <h3 class="title">${_('Create Your First Library')}</h3>
              <div class="copy">
                  <p>${_('Libraries hold a pool of components that can be re-used across multiple courses. Create your first library with the click of a button!')}</p>
              </div>
          </div>

        <ul class="list-actions">
          <li class="action-item">
              <a href="#" class="action-primary action-create new-button action-create-library new-library-button"><span class="icon fa fa-plus icon-inline" aria-hidden="true"></span> ${_('Create Your First Library')}</a>
          </li>
        </ul>
        </div>
        % endif
      </div>
      %endif

    </article>
    <aside class="content-supplementary" role="complementary">
      <div class="bit">
        <h3 class="title title-3">${_('New to {studio_name}?').format(studio_name=settings.STUDIO_NAME)}</h3>
        <p>${_('Click Help in the upper-right corner to get more information about the {studio_name} page you are viewing. You can also use the links at the bottom of the page to access our continually updated documentation and other {studio_name} resources.').format(studio_name=settings.STUDIO_SHORT_NAME)}</p>

        <ol class="list-actions">
          <li class="action-item">

            <a href="${get_online_help_info(online_help_token())['doc_url']}" target="_blank">${_("Getting Started with {studio_name}").format(studio_name=settings.STUDIO_NAME)}</a>
          </li>
        </ol>
      </div>

      % if course_creator_status=='disallowed_for_this_site' and settings.FEATURES.get('STUDIO_REQUEST_EMAIL',''):
      <div class="bit">
        <h3 class="title title-3">${_("Can I create courses in {studio_name}?").format(studio_name=settings.STUDIO_NAME)}</h3>
        <p>${Text(_("In order to create courses in {studio_name}, you must {link_start}contact {platform_name} staff to help you create a course{link_end}.")).format(
            studio_name=settings.STUDIO_NAME,
            platform_name=settings.PLATFORM_NAME,
            link_start=HTML('<a href="mailto:{email}">').format(email=settings.FEATURES.get('STUDIO_REQUEST_EMAIL','')),
            link_end=HTML("</a>"),
          )}</p>
      </div>
      % endif

      % if course_creator_status == "unrequested":
      <div class="bit">
        <h3 class="title title-3">${_("Can I create courses in {studio_name}?").format(studio_name=settings.STUDIO_NAME)}</h3>
        <p>${_('In order to create courses in {studio_name}, you must have course creator privileges to create your own course.').format(studio_name=settings.STUDIO_NAME)}</p>
      </div>

      % elif course_creator_status == "denied":
      <div class="bit">
        <h3 class="title title-3">${_("Can I create courses in {studio_name}?").format(studio_name=settings.STUDIO_NAME)}</h3>
        <p>${Text(_("Your request to author courses in {studio_name} has been denied. Please {link_start}contact {platform_name} Staff with further questions{link_end}.")).format(
            studio_name=settings.STUDIO_NAME,
            platform_name=settings.PLATFORM_NAME,
            link_start=HTML('<a href="mailto:{email}">').format(email=settings.TECH_SUPPORT_EMAIL),
            link_end=HTML('</a>'),
          )}</p>
      </div>

      % endif
    </aside>
  </section>


  % else:
  <section class="content">
    <article class="content-primary" role="main">
      <div class="introduction">
        <h2 class="title">${_("Thanks for signing up, {name}!").format(name=user.username)}</h2>
      </div>

      <div class="notice notice-incontext notice-instruction notice-instruction-verification">
        <div class="msg">
          <h3 class="title">${_("We need to verify your email address")}</h3>
          <div class="copy">
            <p>${_('Almost there! In order to complete your sign up we need you to verify your email address ({email}). An activation message and next steps should be waiting for you there.').format(email=user.email)}</p>
          </div>
        </div>
      </div>
    </article>

    <aside class="content-supplementary" role="complementary">
      <div class="bit">
        <h3 class="title title-3">${_('Need help?')}</h3>
        <p>${_('Please check your Junk or Spam folders in case our email isn\'t in your INBOX. Still can\'t find the verification email? Request help via the link below.')}</p>
      </div>
    </aside>
  </section>

  %endif
</div>
<%static:webpack entry="StudioIndex">
    var enableReruns = ${allow_course_reruns and rerun_creator_status and course_creator_status=='granted' | n, dump_js_escaped_json};
    new StudioCourseIndex(
        ".react-course-listing",
        ${sorted(courses, key=lambda s: s['display_name'].lower() if s['display_name'] is not None else '') | n, dump_js_escaped_json},
        enableReruns
    );
    new StudioArchivedIndex(
        ".react-archived-course-listing",
        ${sorted(archived_courses, key=lambda s: s['display_name'].lower() if s['display_name'] is not None else '') | n, dump_js_escaped_json},
        enableReruns
    );
    new StudioLibraryIndex(
        ".react-library-listing",
        ${sorted(libraries, key=lambda s: s['display_name'].lower() if s['display_name'] is not None else '') | n, dump_js_escaped_json}
    );
</%static:webpack>
</%block>