project-list.pug 7.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223
  1. include ./_current_plan_mixins
  2. .row
  3. .col-xs-12(ng-cloak)
  4. form.project-search.form-horizontal(role="form")
  5. .form-group.has-feedback.has-feedback-left.col-md-7.col-xs-12
  6. input.form-control.col-md-7.col-xs-12(
  7. placeholder=translate('search_projects')+"…",
  8. aria-label=translate('search_projects')+"…",
  9. autofocus='autofocus',
  10. ng-model="searchText.value",
  11. focus-on='search:clear',
  12. ng-keyup="searchProjects()"
  13. )
  14. i.fa.fa-search.form-control-feedback-left(aria-hidden="true")
  15. i.fa.fa-times.form-control-feedback(
  16. ng-click="clearSearchText()",
  17. style="cursor: pointer;",
  18. ng-show="searchText.value.length > 0"
  19. aria-hidden="true"
  20. )
  21. button.sr-only(
  22. type="button"
  23. ng-click="clearSearchText()"
  24. ng-show="searchText.value.length > 0"
  25. ) #{translate('clear_search')}
  26. .project-tools(ng-cloak)
  27. .project-list-upgrade-prompt(ng-cloak ng-hide="selectedProjects.length > 0")
  28. +current_plan()
  29. .btn-toolbar
  30. .btn-group(ng-hide="selectedProjects.length < 1")
  31. a.btn.btn-default(
  32. href,
  33. aria-label=translate('download'),
  34. tooltip=translate('download'),
  35. tooltip-placement="bottom",
  36. tooltip-append-to-body="true",
  37. ng-click="downloadSelectedProjects()"
  38. )
  39. i.fa.fa-cloud-download(aria-hidden="true")
  40. a.btn.btn-default(
  41. href,
  42. ng-if="filter !== 'archived'"
  43. aria-label=translate("archive"),
  44. tooltip=translate("archive"),
  45. tooltip-placement="bottom",
  46. tooltip-append-to-body="true",
  47. ng-click="openArchiveProjectsModal()"
  48. )
  49. i.fa.fa-inbox(aria-hidden="true")
  50. a.btn.btn-default(
  51. href,
  52. ng-if="filter !== 'trashed'"
  53. aria-label=translate("trash"),
  54. tooltip=translate("trash"),
  55. tooltip-placement="bottom",
  56. tooltip-append-to-body="true",
  57. ng-click="openTrashProjectsModal()"
  58. )
  59. i.fa.fa-trash(aria-hidden="true")
  60. .btn-group.dropdown(
  61. ng-hide="selectedProjects.length < 1 || filter === 'archived' || filter === 'trashed'",
  62. dropdown
  63. )
  64. a.btn.btn-default.dropdown-toggle(
  65. href,
  66. data-toggle="dropdown",
  67. dropdown-toggle,
  68. tooltip=translate('add_to_folders'),
  69. tooltip-append-to-body="true",
  70. tooltip-placement="bottom"
  71. )
  72. i.fa.fa-folder-open
  73. |
  74. span.caret
  75. span.sr-only #{translate('add_to_folders')}
  76. ul.dropdown-menu.dropdown-menu-right.js-tags-dropdown-menu.tags-dropdown-menu(
  77. role="menu"
  78. ng-controller="TagListController"
  79. )
  80. li.dropdown-header #{translate("add_to_folder")}
  81. li(
  82. ng-repeat="tag in tags | orderBy:'name'",
  83. ng-controller="TagDropdownItemController"
  84. )
  85. a(href="#", ng-click="addOrRemoveProjectsFromTag()", stop-propagation="click")
  86. i.fa(
  87. ng-class="{\
  88. 'fa-check-square-o': areSelectedProjectsInTag == true,\
  89. 'fa-square-o': areSelectedProjectsInTag == false,\
  90. 'fa-minus-square-o': areSelectedProjectsInTag == 'partial'\
  91. }"
  92. )
  93. span.sr-only Add or remove project from tag
  94. | {{tag.name}}
  95. li.divider
  96. li
  97. a(href, ng-click="openNewTagModal()", stop-propagation="click") #{translate("create_new_folder")}
  98. .btn-group.dropdown(
  99. ng-hide="selectedProjects.length != 1 || filter === 'archived' || filter === 'trashed'",
  100. dropdown
  101. )
  102. a.btn.btn-default.dropdown-toggle(
  103. href,
  104. data-toggle="dropdown",
  105. dropdown-toggle
  106. ) #{translate("more")}
  107. span.caret
  108. ul.dropdown-menu.dropdown-menu-right(role="menu")
  109. li(ng-show="getFirstSelectedProject().accessLevel == 'owner'")
  110. a(
  111. href,
  112. ng-click="openRenameProjectModal()"
  113. ) #{translate("rename")}
  114. li
  115. a(
  116. href,
  117. ng-click="openCloneProjectModal(getFirstSelectedProject())"
  118. ) #{translate("make_copy")}
  119. .btn-group(ng-show="filter === 'archived' && selectedProjects.length > 0")
  120. a.btn.btn-default(
  121. href,
  122. data-original-title=translate("unarchive"),
  123. data-toggle="tooltip",
  124. data-placement="bottom",
  125. ng-click="unarchiveProjects(selectedProjects)"
  126. ) #{translate("unarchive")}
  127. .btn-group(ng-show="filter === 'trashed' && selectedProjects.length > 0")
  128. a.btn.btn-default(
  129. href,
  130. data-original-title=translate("untrash"),
  131. data-toggle="tooltip",
  132. data-placement="bottom",
  133. ng-click="untrashProjects(selectedProjects)"
  134. ) #{translate("untrash")}
  135. .btn-group(ng-show="filter === 'trashed' && selectedProjects.length > 0")
  136. a.btn.btn-danger(
  137. href,
  138. ng-if="hasLeavableProjectsSelected() && !hasDeletableProjectsSelected()",
  139. data-original-title=translate('leave'),
  140. data-toggle="tooltip",
  141. data-placement="bottom",
  142. ng-click="openLeaveProjectsModal()"
  143. ) #{translate("leave")}
  144. a.btn.btn-danger(
  145. href,
  146. ng-if="hasDeletableProjectsSelected() && !hasLeavableProjectsSelected()",
  147. data-original-title=translate('delete'),
  148. data-toggle="tooltip",
  149. data-placement="bottom",
  150. ng-click="openDeleteProjectsModal()"
  151. ) #{translate("delete")}
  152. a.btn.btn-danger(
  153. href,
  154. ng-if="hasDeletableProjectsSelected() && hasLeavableProjectsSelected()",
  155. data-original-title=translate('delete_and_leave'),
  156. data-toggle="tooltip",
  157. data-placement="bottom",
  158. ng-click="openLeaveOrDeleteProjectsModal()"
  159. ) #{translate("delete_and_leave")}
  160. .row.row-spaced
  161. .col-xs-12
  162. .card.card-thin.project-list-card
  163. ul.list-unstyled.project-list.structured-list(
  164. select-all-list,
  165. ng-if="projects.length > 0",
  166. max-height="projectListHeight - 25",
  167. ng-cloak
  168. )
  169. table.project-list-table
  170. tr.project-list-table-header-row
  171. th.project-list-table-name-cell
  172. .project-list-table-name-container
  173. input.project-list-table-select-item(
  174. select-all,
  175. type="checkbox"
  176. aria-label=translate('select_all_projects')
  177. )
  178. span.header.clickable.project-list-table-name(ng-click="changePredicate('name')") #{translate("title")}
  179. i.tablesort.fa(ng-class="getSortIconClass('name')" aria-hidden="true")
  180. button.sr-only(ng-click="changePredicate('name')") Sort by #{translate("title")}
  181. th.project-list-table-owner-cell
  182. span.header.clickable(ng-click="changePredicate('ownerName')") #{translate("owner")}
  183. i.tablesort.fa(ng-class="getSortIconClass('ownerName')" aria-hidden="true")
  184. button.sr-only(ng-click="changePredicate('ownerName')") Sort by #{translate("owner")}
  185. th.project-list-table-lastupdated-cell
  186. span.header.clickable(ng-click="changePredicate('lastUpdated')") #{translate("last_modified")}
  187. i.tablesort.fa(ng-class="getSortIconClass('lastUpdated')" aria-hidden="true")
  188. button.sr-only(ng-click="changePredicate('lastUpdated')") Sort by #{translate("last_modified")}
  189. th.project-list-table-actions-cell
  190. span.header #{translate("actions")}
  191. tr.project-list-table-row(
  192. ng-repeat="project in visibleProjects | orderBy:getValueForCurrentPredicate:reverse:comparator",
  193. ng-controller="ProjectListItemController"
  194. select-row
  195. )
  196. include ./item
  197. tr(
  198. ng-if="visibleProjects.length == 0",
  199. ng-cloak
  200. )
  201. td(colspan="4").project-list-table-no-projects-cell
  202. span.small #{translate("no_projects")}
  203. div.welcome.text-centered(ng-if="projects.length == 0", ng-cloak)
  204. h2 #{translate("welcome_to_sl")}
  205. p #{translate("new_to_latex_look_at")}
  206. a(href="/templates") #{translate("templates").toLowerCase()}
  207. | #{translate("or")}
  208. a(href="/learn") #{translate("latex_help_guide")}
  209. | ,
  210. br
  211. | #{translate("or_create_project_left")}