aside.editor-sidebar.full-size(
	ng-controller="FileTreeController"
	ng-class="{ 'multi-selected': multiSelectedCount > 0 }"
	ng-show="ui.view != 'history' || !history.isV2"
	vertical-resizable-panes="outline-resizer"
	vertical-resizable-panes-toggled-externally-on="outline-toggled"
	vertical-resizable-panes-min-size="32"
	vertical-resizable-panes-max-size="75%"
)
	.file-tree(
		vertical-resizable-top
	)
		.toolbar.toolbar-filetree(ng-if="permissions.write")
			a(
				href,
				ng-click="openNewDocModal()",
				tooltip-html="'"+translate('new_file').replace(' ', '<br>')+"'",
				tooltip-placement="bottom"
			)
				i.fa.fa-fw.fa-file
			a(
				href,
				ng-click="openNewFolderModal()",
				tooltip-html="'"+translate('new_folder').replace(' ', '<br>')+"'",
				tooltip-placement="bottom"
			)
				i.fa.fa-fw.fa-folder
			a(
				href,
				ng-click="openUploadFileModal()",
				tooltip=translate('upload'),
				tooltip-placement="bottom"
			)
				i.fa.fa-fw.fa-upload

			.toolbar-right
				a(
					href,
					ng-click="startRenamingSelected()",
					tooltip=translate('rename'),
					tooltip-placement="bottom",
					ng-show="multiSelectedCount == 0"
				)
					i.fa.fa-fw.fa-pencil
				a(
					href,
					ng-click="openDeleteModalForSelected()",
					tooltip=translate('delete'),
					tooltip-placement="bottom",
					tooltip-append-to-body="true"
				)
					i.fa.fa-fw.fa-trash-o


		.file-tree-inner(
			ng-if="rootFolder",
			ng-controller="FileTreeRootFolderController",
			ng-class="{ 'no-toolbar': !permissions.write }"
		)
			ul.list-unstyled.file-tree-list(
				droppable="permissions.write"
				accept=".entity-name"
				on-drop-callback="onDrop"
			)
				li(
					ng-show="ui.pdfLayout == 'flat' && (ui.view == 'editor' || ui.view == 'pdf' || ui.view == 'file')"
					ng-class="{ 'selected': ui.view == 'pdf' }"
					ng-controller="PdfViewToggleController"
				)
					.entity
						.entity-name(
							ng-click="togglePdfView()"
						)
							i.fa.fa-fw.toggle
							i.fa.fa-fw.fa-file-pdf-o
							|  PDF

				file-entity(
					entity="entity",
					permissions="permissions",
					ng-repeat="entity in rootFolder.children | orderBy:[orderByFoldersFirst, 'name']"
				)

				li(ng-show="deletedDocs.length > 0 && ui.view == 'history'")
					h3 #{translate("deleted_files")}
				li(
					ng-class="{ 'selected': entity.selected }",
					ng-repeat="entity in deletedDocs | orderBy:'name'",
					ng-controller="FileTreeEntityController",
					ng-show="ui.view == 'history'"
				)
					.entity
						.entity-name(
							ng-click="select($event)"
						)
							//- Just a spacer to align with folders
							i.fa.fa-fw.toggle
							i.fa.fa-fw.fa-file

							span  {{ entity.name }}

	.outline-container(
		vertical-resizable-bottom
		ng-controller="OutlineController"
	)
		outline-pane(
			is-tex-file="isTexFile"
			outline="outline"
			project-id="project_id"
			jump-to-line="jumpToLine"
			on-toggle="onToggle"
			event-tracking="eventTracking"
			highlighted-line="highlightedLine"
		)


script(type='text/ng-template', id='entityListItemTemplate')
	li(
		ng-class="{ 'selected': entity.selected, 'multi-selected': entity.multiSelected }",
		ng-controller="FileTreeEntityController"
	)
		.entity(ng-if="entity.type != 'folder'")
			.entity-name(
				ng-click="select($event)"
				ng-dblclick="permissions.write && startRenaming()"
				draggable="permissions.write"
				draggable-helper="draggableHelper"
				context-menu
				data-target="context-menu-{{ entity.id }}"
				context-menu-container="body"
				context-menu-disabled="!permissions.write"
			)
				//- Just a spacer to align with folders
				i.fa.fa-fw.toggle(ng-if="entity.type != 'folder'")

				i.fa.fa-fw(ng-if="entity.type != 'folder'", ng-class="'fa-' + iconTypeFromName(entity.name)")
					i.fa.fa-external-link-square.fa-rotate-180.linked-file-highlight(
						ng-if="entity.linkedFileData.provider"
					)
				span(
					ng-hide="entity.renaming"
				)  {{ entity.renamingToName || entity.name }}
				span.rename-input
					input(
						ng-if="permissions.write",
						ng-show="entity.renaming",
						ng-model="inputs.name",
						ng-blur="finishRenaming()",
						select-name-when="entity.renaming",
						on-enter="finishRenaming()"
						valid-file
					)

				span.dropdown.entity-menu-toggle(
					dropdown,
					ng-if="permissions.write"
				)
					a.dropdown-toggle.file-tree-dropdown-toggle(href, dropdown-toggle, stop-propagation="click")

					ul.dropdown-menu.dropdown-menu-right
						li
							a(
								href
								ng-click="startRenaming()"
								right-click="startRenaming()"
								ng-show="!entity.multiSelected"
							) #{translate("rename")}
						li
							a(
								href
								ng-click="openDeleteModal()"
								right-click="openDeleteModal()"
								stop-propagation="click"
							) #{translate("delete")}

				div.dropdown.context-menu(
					id="context-menu-{{ entity.id }}",
					ng-if="permissions.write"
				)
					ul.dropdown-menu
						li
							a(
								href
								ng-click="startRenaming()"
								right-click="startRenaming()"
								ng-show="!entity.multiSelected"
							) #{translate("rename")}
						li
							a(
								href
								ng-click="openDeleteModal()"
								right-click="openDeleteModal()"
								stop-propagation="click"
							) #{translate("delete")}


		.entity(ng-if="entity.type == 'folder'", ng-controller="FileTreeFolderController")
			.entity-name(
				ng-click="select($event)"
				ng-dblclick="permissions.write && startRenaming()"
				draggable="permissions.write"
				draggable-helper="draggableHelper"
				droppable="permissions.write"
				accept=".entity-name"
				on-drop-callback="onDrop"
			)
				div(
					context-menu
					data-target="context-menu-{{ entity.id }}"
					context-menu-container="body"
					context-menu-disabled="!permissions.write"
				)
					i.fa.fa-fw.toggle(
						ng-if="entity.type == 'folder'"
						ng-class="{'fa-angle-right': !expanded, 'fa-angle-down': expanded}"
						ng-click="toggleExpanded()"
					)

					i.fa.fa-fw(
						ng-if="entity.type == 'folder'"
						ng-class="{\
							'fa-folder': !expanded, \
							'fa-folder-open': expanded \
						}"
						ng-click="select($event)"
					)

					span(
						ng-hide="entity.renaming"
					)  {{ entity.renamingToName || entity.name }}
					span.rename-input
						input(
							ng-if="permissions.write",
							ng-show="entity.renaming",
							ng-model="inputs.name",
							ng-blur="finishRenaming()",
							select-name-when="entity.renaming",
							on-enter="finishRenaming()"
							valid-file
						)

					span.dropdown.entity-menu-toggle(
						dropdown,
						ng-if="permissions.write"
					)
						a.dropdown-toggle.file-tree-dropdown-toggle(href, dropdown-toggle, stop-propagation="click")

						ul.dropdown-menu.dropdown-menu-right
							li
								a(
									href
									ng-click="startRenaming()"
									right-click="startRenaming()"
									ng-show="!entity.multiSelected"
								) #{translate("rename")}
							li
								a(
									href
									ng-click="openDeleteModal()"
									right-click="openDeleteModal()"
									stop-propagation="click"
								) #{translate("delete")}
							li.divider
							li
								a(
									href
									ng-click="openNewDocModal()"
									right-click="openNewDocModal()"
								) #{translate("new_file")}
							li
								a(
									href
									ng-click="openNewFolderModal()"
									right-click="openNewFolderModal()"
								) #{translate("new_folder")}
							li
								a(
									href
									ng-click="openUploadFileModal()"
									right-click="openUploadFileModal()"
								) #{translate("upload_file")}

					.dropdown.context-menu(
						ng-if="permissions.write"
						id="context-menu-{{ entity.id }}"
					)
						ul.dropdown-menu
							li
								a(
									href
									ng-click="startRenaming()"
									right-click="startRenaming()"
									ng-show="!entity.multiSelected"
								) #{translate("rename")}
							li
								a(
									href
									ng-click="openDeleteModal()"
									right-click="openDeleteModal()"
									stop-propagation="click"
								) #{translate("delete")}
							li.divider
							li
								a(
									href
									ng-click="openNewDocModal()"
									right-click="openNewDocModal()"
								) #{translate("new_file")}
							li
								a(
									href
									ng-click="openNewFolderModal()"
									right-click="openNewFolderModal()"
								) #{translate("new_folder")}
							li
								a(
									href
									ng-click="openUploadFileModal()"
									right-click="openUploadFileModal()"
								) #{translate("upload_file")}

			ul.list-unstyled(
				ng-if="entity.type == 'folder' && (depth == null || depth < MAX_DEPTH)"
				ng-show="expanded"
				droppable="permissions.write"
				accept=".entity-name"
				on-drop-callback="onDrop"
			)
				file-entity(
					entity="child",
					permissions="permissions",
					ng-repeat="child in entity.children | orderBy:[orderByFoldersFirst, 'name']"
					depth="(depth || 0) + 1"
				)

			.entity-limit-hit(
				ng-if="depth === MAX_DEPTH"
				ng-show="expanded"
			)
				i.fa.fa-fw
				span.entity-limit-hit-message 
					| Some files might be hidden
					|
					i.fa.fa-question-circle.entity-limit-hit-tooltip-trigger(
						tooltip="Your project has hit Overleaf's maximum file depth limit. Files within this folder won't be visible."
						tooltip-append-to-body="true"
						aria-hidden="true"
					)
					span.sr-only 
						| Your project has hit Overleaf's maximum file depth limit. Files within this folder won't be visible. 
					
script(type='text/ng-template', id='newFolderModalTemplate')
	.modal-header
		h3 #{translate("new_folder")}
	.modal-body
		form(novalidate, name="newFolderForm")
			input.form-control(
				type="text",
				placeholder="Folder Name",
				required,
				ng-model="inputs.name",
				on-enter="create()",
				select-name-on="open",
				valid-file,
				name="name"
			)
		div.alert.alert-danger.row-spaced-small(ng-show="newFolderForm.name.$error.validFile")
			| #{translate('files_cannot_include_invalid_characters')}
		div.alert.alert-danger.row-spaced-small(ng-if="error")
			div(ng-switch="error")
				span(ng-switch-when="already exists") #{translate("file_already_exists")}
				span(ng-switch-default) {{error}}
	.modal-footer
		button.btn.btn-default(
			ng-disabled="state.inflight"
			ng-click="cancel()"
		) #{translate("cancel")}
		button.btn.btn-primary(
			ng-disabled="newFolderForm.$invalid || state.inflight"
			ng-click="create()"
		)
			span(ng-hide="state.inflight") #{translate("create")}
			span(ng-show="state.inflight") #{translate("creating")}…

script(type='text/ng-template', id='duplicateFileModalTemplate')
	.modal-header
		h3 #{translate("duplicate_file")}
	.modal-body
		p #{translate("file_already_exists_in_this_location", { fileName: "'{{ fileName }}'" })}
	.modal-footer
		button.btn.btn-default(
			ng-click="cancel()"
		) #{translate("dismiss")}

include ./new-file-modal

script(type='text/ng-template', id='deleteEntityModalTemplate')
	.modal-header
		h3 #{translate("delete")} {{ entity.name }}
	.modal-body
		p !{translate("sure_you_want_to_delete")}
		ul
			li(ng-repeat="entity in entities") {{entity.name}}
	.modal-footer
		button.btn.btn-default(
			ng-disabled="state.inflight"
			ng-click="cancel()"
		) #{translate("cancel")}
		button.btn.btn-danger(
			ng-disabled="state.inflight"
			ng-click="delete()"
		)
			span(ng-hide="state.inflight") #{translate("delete")}
			span(ng-show="state.inflight") #{translate("deleting")}…

script(type='text/ng-template', id='invalidFileNameModalTemplate')
	.modal-header
		h3 #{translate('invalid_file_name')}
	.modal-body
		p #{translate('files_cannot_include_invalid_characters')}
	.modal-footer
		button.btn.btn-default(
			ng-click="$close()"
		) #{translate('ok')}
