context_module_next.mustache 9.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204
  1. <%
  2. # Copyright (C) 2013 - present Instructure, Inc.
  3. #
  4. # This file is part of Canvas.
  5. #
  6. # Canvas is free software: you can redistribute it and/or modify it under
  7. # the terms of the GNU Affero General Public License as published by the Free
  8. # Software Foundation, version 3 of the License.
  9. #
  10. # Canvas is distributed in the hope that it will be useful, but WITHOUT ANY
  11. # WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR
  12. # A PARTICULAR PURPOSE. See the GNU Affero General Public License for more
  13. # details.
  14. #
  15. # You should have received a copy of the GNU Affero General Public License along
  16. # with this program. If not, see <http://www.gnu.org/licenses/>.
  17. %>
  18. <%
  19. context_module_next ||= nil
  20. context_module ||= context_module_next
  21. module_data = context_module ? process_module_data(context_module, @is_student, @current_user, @session) : { published_status: 'unpublished' }
  22. editable ||= can_do(@context, @current_user, :manage_content)
  23. workflow_state = context_module && context_module.workflow_state
  24. @modules ||= []
  25. %>
  26. <% cache_if_module(context_module, editable, @is_student, @can_view_unpublished, @current_user, @context) do %>
  27. <div
  28. class="item-group-condensed context_module
  29. <%= 'editable_context_module' if editable %>
  30. <%= 'has_requirements' if context_module && context_module.completion_requirements.present? %>
  31. "
  32. aria-label="<%= context_module ? context_module.name : "" %>"
  33. data-workflow-state="<%= context_module ? context_module.workflow_state : "{{ workflow_state }}"%>"
  34. data-module-url="<%= context_url(@context, :context_url) %>/modules/<%= context_module ? context_module.id : "{{ id }}" %>"
  35. data-module-id="<%= context_module ? context_module.id : "{{ id }}" %>"
  36. id="context_module_<%= context_module ? context_module.id : "blank" %>"
  37. style="<%= hidden unless context_module %>"
  38. >
  39. <a id="module_<%= context_module.id if context_module %>"></a>
  40. <div class="ig-header header" id="<%= context_module.id if context_module %>">
  41. <span
  42. class="sortable-handle reorder_module_link"
  43. title="{{#t}}Drag to reorder modules{{/t}}"
  44. style="<%= hidden unless @modules.length > 1 && editable %>"
  45. >
  46. <i aria-hidden="true" class="icon-drag-handle"></i>
  47. </span>
  48. <h2 class='screenreader-only'><%= context_module.try_rescue(:name) || nbsp %></h2>
  49. <span
  50. role="button"
  51. tabindex="0"
  52. href="<%= context_url(@context, :context_url) %>/modules/<%= context_module ? context_module.id : "{{ id }}" %>/collapse"
  53. class="ig-header-title collapse_module_link ellipsis"
  54. aria-controls="context_module_content_<%= context_module && context_module.id %>"
  55. aria-expanded="true"
  56. title="<%= context_module.try_rescue(:name) || nbsp %>"
  57. >
  58. <i class="icon-mini-arrow-down"></i>
  59. <span class="name"><%= context_module.try_rescue(:name) || nbsp %></span>
  60. </span>
  61. <span
  62. role="button"
  63. tabindex="0"
  64. href="<%= context_url(@context, :context_url) %>/modules/<%= context_module ? context_module.id : "{{ id }}" %>/collapse"
  65. class="ig-header-title expand_module_link ellipsis"
  66. aria-controls="context_module_content_<%= context_module && context_module.id %>"
  67. aria-expanded="false"
  68. title="<%= context_module.try_rescue(:name) || nbsp %>"
  69. >
  70. <i class="icon-mini-arrow-right"></i>
  71. <span class="name ellipsis"><%= context_module.try_rescue(:name) || nbsp %></span>
  72. </span>
  73. {{> views/context_modules/prerequisites_message}}
  74. <div class="requirements_message">
  75. <% if context_module && context_module.completion_requirements.present? %>
  76. <ul class="pill">
  77. <% count = context_module.requirement_count %>
  78. <% completion_label = count == 1 ? t("Complete One Item") : t("Complete All Items") %>
  79. <li aria-label="<%= completion_label %>" data-requirement-count="<%= count %>" tabindex="0">
  80. <%= completion_label %>
  81. </li>
  82. </ul>
  83. <% end %>
  84. </div>
  85. <div class="ig-header-admin">
  86. <% unless editable %>
  87. <% if context_module %>
  88. <div class="completion_status">
  89. <i class="icon-check complete_icon"
  90. data-tooltip
  91. title="{{#t}}Completed{{/t}}"
  92. >
  93. </i>
  94. <i class="icon-minimize in_progress_icon"
  95. data-tooltip
  96. title="{{#t}}In Progress{{/t}}"
  97. >
  98. </i>
  99. <i class="icon-lock locked_icon"
  100. data-tooltip
  101. title="<%= context_module && context_module.to_be_unlocked ?
  102. t('Locked until %{unlock_date}', :unlock_date => (datetime_string(context_module.try_rescue(:unlock_at)) || nbsp)) : t('Locked') %>"
  103. >
  104. </i>
  105. </div>
  106. <% end %>
  107. <% end %>
  108. <% if editable %>
  109. <span
  110. data-module-type="module"
  111. data-id="<%= context_module && context_module.id %>"
  112. data-course-id="<%= context_module && context_module.context_id %>"
  113. data-published="<%= module_data[:published_status] == 'published' %>"
  114. data-publishable="<%= true %>"
  115. data-publish-title="<%= context_module ? context_module.name : 'module' %>"
  116. title=""
  117. data-tooltip
  118. class="publish-icon module <%= module_data[:published_status] %>"
  119. >
  120. <i class="icon-<%= module_data[:published_status] %>" alt="<%= module_data[:published_status] == 'published' ? t('published') : t('unpublished') %>"></i>
  121. </span>
  122. <button
  123. aria-label="<%= t('Add Content to %{module_name}', {module_name: context_module ? context_module.name : 'module'}) %>"
  124. rel="<%= context_url(@context, :context_url) %>/modules/<%= context_module ? context_module.id : "{{ id }}" %>/items"
  125. class="add_module_item_link btn"><i class="icon-plus"></i></button>
  126. <button class="btn al-trigger" aria-label="<%= t('Manage %{module_name}', {module_name: context_module ? context_module.name : 'module'}) %>">
  127. <i class="icon-settings"></i><i class="icon-mini-arrow-down"></i>
  128. </button>
  129. <ul class="al-options">
  130. <li role="presentation">
  131. <a
  132. href="<%= context_url(@context, :context_url) %>/modules/<%= context_module ? context_module.id : "{{ id }}" %>"
  133. class="icon-edit edit_module_link"
  134. title="{{#t}}Edit{{/t}}</a>
  135. </li>
  136. <li role="presentation">
  137. <a
  138. href="#<%= context_module ? context_module.id : "{{ id }}" %>"
  139. class="move_module_link icon-updown"
  140. title="{{#t}}Move To...{{/t}}</a>
  141. </li>
  142. <li role="presentation">
  143. <a
  144. href="<%= context_url(@context, :context_url) %>/modules/<%= context_module ? context_module.id : "{{ id }}" %>"
  145. class="delete_module_link icon-trash"
  146. title="{{#t}}Delete{{/t}}</a>
  147. </li>
  148. <%= external_tools_menu_items(@menu_tools[:module_menu], {link_class: "menu_tool_link", settings_key: :module_menu, in_list: true, url_params: {:modules => [context_module ? context_module.id : "{{ id }}"]}}) %>
  149. </ul>
  150. <% end %>
  151. <span style="display: none;">
  152. <span class="name"><%= context_module && context_module.name %></span>
  153. <span class="id"><%= context_module && context_module.id %></span>
  154. <span class="publish_final_grade"><%= context_module.try_rescue(:publish_final_grade?) || nbsp %></span>
  155. <span class="require_sequential_progress"><%= context_module.try_rescue(:require_sequential_progress) || nbsp %></span>
  156. </span>
  157. </div>
  158. </div>
  159. <div class="content" id="context_module_content_<%= context_module && context_module.id %>">
  160. <ul class="ig-list items context_module_items <%= 'manageable' if editable %>">
  161. <% if context_module && module_data[:items] %>
  162. <% module_data[:items].each do |item| %>
  163. <%
  164. item_data = module_data[:items_data][item.id]
  165. locals = {
  166. :completion_criteria => context_module.completion_requirements,
  167. :item_data => item_data,
  168. :editable => editable,
  169. }
  170. %>
  171. {{> views/context_modules/module_item_next}}
  172. <% if item_data[:show_cyoe_placeholder] %>
  173. {{> views/context_modules/module_item_conditional_next}}
  174. <% end %>
  175. <% end %>
  176. <% end %>
  177. </ul>
  178. <div class="footer">
  179. <div class="progression_container">
  180. <a href="#" class="progression_details_link" title="{{#t}}See Student Progress for this Module{{/t}}" style="display: none;">
  181. <span class="progression_started"><%= t 'progression_started_count', '*%{count}* In Progress', :count => 0, :wrapper => '<span class="progression_started_count">\1</span>' %></span> <span class="progression_complete"><%= t'progression_complete_count', '*%{count}* Complete', :count => 0, :wrapper => '<span class="progression_complete_count">\1</span>' %></span>
  182. </a>
  183. <div class="unlock_details" style="<%= hidden unless context_module && context_module.to_be_unlocked %>">
  184. <div class="unlock_at" style="<%= hidden %>"><%= datetime_string(context_module.try_rescue(:unlock_at), :verbose) %></div>
  185. <%= t 'module_will_unlock_at', 'Will unlock *%{unlock_date}*', :wrapper => "<span class=\"displayed_unlock_at\" #{context_sensitive_datetime_title(context_module.try_rescue(:unlock_at), @context)}>\\1</span>", :unlock_date => (datetime_string(context_module.try_rescue(:unlock_at)) || nbsp) %>
  186. </div>
  187. </div><!-- progression_container -->
  188. </div><!-- footer -->
  189. </div>
  190. </div>
  191. <% end %>